Добавлены ReadBytes WriteBytes для бестиповых файлов

Добавлена f.Rewrite для двоичных файлов
CreateBinary и OpenBinary - изменены - теперь они возвращают бестиповой файл
This commit is contained in:
Mikhalkovich Stanislav 2019-01-15 14:25:45 +03:00
parent b81d1f328e
commit 5bb8771953
8 changed files with 76 additions and 18 deletions

View file

@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3";
public const string Minor = "4";
public const string Build = "2";
public const string Revision = "1936";
public const string Revision = "1937";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%MINOR%=4
%REVISION%=1936
%COREVERSION%=2
%REVISION%=1937
%MINOR%=4
%MAJOR%=3

View file

@ -10,16 +10,16 @@
<param name="Keyword" value="WriteElements"></object>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><link rel="StyleSheet" href="../../../default.css">
</HEAD><body><H1>Ïîäïðîãðàììû äëÿ ðàáîòû ñ òèïèçèðîâàííûìè ôàéëàìè</H1>
<table border=0 cellpadding=5><tr><td><code><b>function</b> CreateBinary&lt;T&gt;(fname: string): <b>file</b> <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ñîçäà¸ò èëè îáíóëÿåò òèïèçèðîâàííûé ôàéë è âîçâðàùàåò çíà÷åíèå äëÿ èíèöèàëèçàöèè ôàéëîâîé ïåðåìåííîé</td></tr>
<table border=0 cellpadding=5><tr><td><code><b>function</b> CreateBinary(fname: string): file;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ñîçäà¸ò èëè îáíóëÿåò äâîè÷íûé ôàéë è âîçâðàùàåò çíà÷åíèå äëÿ èíèöèàëèçàöèè ôàéëîâîé ïåðåìåííîé</td></tr>
<tr><td><code><b>function</b> CreateFile&lt;T&gt;(fname: string): <b>file</b> <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ñîçäà¸ò èëè îáíóëÿåò òèïèçèðîâàííûé ôàéë è âîçâðàùàåò çíà÷åíèå äëÿ èíèöèàëèçàöèè ôàéëîâîé ïåðåìåííîé</td></tr>
<tr><td><code><b>function</b> CreateFileInteger(fname: string): <b>file</b> <b>of</b> integer;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ñîçäà¸ò èëè îáíóëÿåò òèïèçèðîâàííûé ôàéë öåëûõ è âîçâðàùàåò çíà÷åíèå äëÿ èíèöèàëèçàöèè ôàéëîâîé ïåðåìåííîé</td></tr>
<tr><td><code><b>function</b> CreateFileReal(fname: string): <b>file</b> <b>of</b> real;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ñîçäà¸ò èëè îáíóëÿåò òèïèçèðîâàííûé ôàéë âåùåñòâåííûõ è âîçâðàùàåò çíà÷åíèå äëÿ èíèöèàëèçàöèè ôàéëîâîé ïåðåìåííîé</td></tr>
<tr><td><code><b>function</b> OpenBinary&lt;T&gt;(fname: string): <b>file</b> <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Îòêðûâàåò òèïèçèðîâàííûé ôàéë è âîçâðàùàåò çíà÷åíèå äëÿ èíèöèàëèçàöèè ôàéëîâîé ïåðåìåííîé</td></tr>
<tr><td><code><b>function</b> OpenBinary(fname: string): file;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Îòêðûâàåò äâîè÷íûé ôàéë è âîçâðàùàåò çíà÷åíèå äëÿ èíèöèàëèçàöèè ôàéëîâîé ïåðåìåííîé</td></tr>
<tr><td><code><b>function</b> OpenFile&lt;T&gt;(fname: string): <b>file</b> <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Îòêðûâàåò òèïèçèðîâàííûé ôàéë è âîçâðàùàåò çíà÷åíèå äëÿ èíèöèàëèçàöèè ôàéëîâîé ïåðåìåííîé</td></tr>
<tr><td><code><b>function</b> OpenFileInteger(fname: string): <b>file</b> <b>of</b> integer;</code>

View file

@ -1 +1 @@
!define VERSION '3.4.2.1936'
!define VERSION '3.4.2.1937'

View file

@ -488,8 +488,10 @@ type
///- f.Write(a,b,...)
/// Выводит значения a,b,... в двоичный файл
procedure Write(params vals: array of object);
/// Устанавливает файловый указатель на начало файла
/// Открывает существующий двоичный файл на чтение и запись. Устанавливает файловый указатель на начало файла
procedure Reset;
/// Открывает двоичный файл на чтение и запись. Если файл не существовал, он создаётся, если существовал, он обнуляется
procedure Rewrite;
/// Возвращает имя файла
function Name: string;
/// Возвращает полное имя файла
@ -529,7 +531,11 @@ type
/// Устанавливает текущую позицию файлового указателя в бестиповом файле на элемент с номером n
procedure Seek(n: int64);
/// Возвращает или устанавливает текущую позицию файлового указателя в бестиповом файле
property Position: int64 read GetFilePos write Seek;
property Position: int64 read GetFilePos write Seek;
/// Записывает данные из байтового массива в бестиповой файл
procedure WriteBytes(a: array of byte);
/// Считывает указанное количество байтов из бестипового файла в байтовый массив
function ReadBytes(count: integer): array of byte;
end;
//{{{doc: Начало секции интерфейса для документации }}}
@ -5593,6 +5599,11 @@ begin
PABCSystem.Reset(Self);
end;
procedure AbstractBinaryFile.Rewrite;
begin
PABCSystem.Rewrite(Self);
end;
function AbstractBinaryFile.Name: string;
begin
Result := fi.Name
@ -5620,6 +5631,24 @@ function BinaryFile.Size: int64 := PABCSystem.FileSize(Self);
procedure BinaryFile.Seek(n: int64) := PABCSystem.Seek(Self, n);
procedure BinaryFile.WriteBytes(a: array of byte);
begin
if Self.fi = nil then
raise new System.IO.IOException(GetTranslation(FILE_NOT_ASSIGNED));
if Self.fs = nil then
raise new System.IO.IOException(GetTranslation(FILE_NOT_OPENED));
Self.bw.Write(a);
end;
function BinaryFile.ReadBytes(count: integer): array of byte;
begin
if Self.fi = nil then
raise new System.IO.IOException(GetTranslation(FILE_NOT_ASSIGNED));
if Self.fs = nil then
raise new System.IO.IOException(GetTranslation(FILE_NOT_OPENED));
Result := Self.br.ReadBytes(count)
end;
// -----------------------------------------------------
// Eoln - Eof
// -----------------------------------------------------

View file

@ -11,14 +11,14 @@ uses PABCSystem;
//>> Подпрограммы для работы с типизированными файлами # Subroutines for typed files
// -----------------------------------------------------
/// Открывает типизированный файл и возвращает значение для инициализации файловой переменной
function OpenBinary<T>(fname: string): file of T;
/// Открывает бестиповой файл и возвращает значение для инициализации файловой переменной
function OpenBinary(fname: string): file;
begin
PABCSystem.Reset(Result, fname);
end;
/// Создаёт или обнуляет типизированный файл и возвращает значение для инициализации файловой переменной
function CreateBinary<T>(fname: string): file of T;
/// Создаёт или обнуляет бестиповой файл и возвращает значение для инициализации файловой переменной
function CreateBinary(fname: string): file;
begin
PABCSystem.Rewrite(Result, fname);
end;
@ -64,7 +64,7 @@ end;
/// Открывает типизированный файл, записывает в него последовательность элементов ss и закрывает его
procedure WriteElements<T>(fname: string; ss: sequence of T);
begin
var f := CreateBinary&<T>(fname);
var f := CreateFile&<T>(fname);
foreach var x in ss do
f.Write(x);
f.Close
@ -119,7 +119,7 @@ end;
/// Открывает типизированный файл, возвращает последовательность его элементов и закрывает его
function ReadElements<T>(fname: string): sequence of T;
begin
var f := OpenBinary&<T>(fname);
var f := OpenFile&<T>(fname);
while not f.Eof do
begin
var x := f.Read;

View file

@ -488,8 +488,10 @@ type
///- f.Write(a,b,...)
/// Выводит значения a,b,... в двоичный файл
procedure Write(params vals: array of object);
/// Устанавливает файловый указатель на начало файла
/// Открывает существующий двоичный файл на чтение и запись. Устанавливает файловый указатель на начало файла
procedure Reset;
/// Открывает двоичный файл на чтение и запись. Если файл не существовал, он создаётся, если существовал, он обнуляется
procedure Rewrite;
/// Возвращает имя файла
function Name: string;
/// Возвращает полное имя файла
@ -529,7 +531,11 @@ type
/// Устанавливает текущую позицию файлового указателя в бестиповом файле на элемент с номером n
procedure Seek(n: int64);
/// Возвращает или устанавливает текущую позицию файлового указателя в бестиповом файле
property Position: int64 read GetFilePos write Seek;
property Position: int64 read GetFilePos write Seek;
/// Записывает данные из байтового массива в бестиповой файл
procedure WriteBytes(a: array of byte);
/// Считывает указанное количество байтов из бестипового файла в байтовый массив
function ReadBytes(count: integer): array of byte;
end;
//{{{doc: Начало секции интерфейса для документации }}}
@ -5593,6 +5599,11 @@ begin
PABCSystem.Reset(Self);
end;
procedure AbstractBinaryFile.Rewrite;
begin
PABCSystem.Rewrite(Self);
end;
function AbstractBinaryFile.Name: string;
begin
Result := fi.Name
@ -5620,6 +5631,24 @@ function BinaryFile.Size: int64 := PABCSystem.FileSize(Self);
procedure BinaryFile.Seek(n: int64) := PABCSystem.Seek(Self, n);
procedure BinaryFile.WriteBytes(a: array of byte);
begin
if Self.fi = nil then
raise new System.IO.IOException(GetTranslation(FILE_NOT_ASSIGNED));
if Self.fs = nil then
raise new System.IO.IOException(GetTranslation(FILE_NOT_OPENED));
Self.bw.Write(a);
end;
function BinaryFile.ReadBytes(count: integer): array of byte;
begin
if Self.fi = nil then
raise new System.IO.IOException(GetTranslation(FILE_NOT_ASSIGNED));
if Self.fs = nil then
raise new System.IO.IOException(GetTranslation(FILE_NOT_OPENED));
Result := Self.br.ReadBytes(count)
end;
// -----------------------------------------------------
// Eoln - Eof
// -----------------------------------------------------

Binary file not shown.