Object Pascal
Информация - Компьютеры, программирование
Другие материалы по предмету Компьютеры, программирование
Пример процедуры, записывающей в конец текстового файла строку символов:
Procedure AddStrToTextFile(nF, St:String);
Var f: Text;
Begin
AssignFile(f, nF);
If not FileExists(nF) then Rewrite(f) {не существует, создать и открыть}
Else {иначе}
Begin
Reset(f); {существует, открыть }
While not Eof(f) do Readln(f); {передвинуть указатель в конец файла}
End;
Writeln(f, St); {записать строку }
CloseFile(f); {закрыть файл}
End;
К процедуре можно обратиться, например, так:
Var
S1: String[58];
S2: String[189];
…
AddStrToTextFile(c:\Files\ring.txt, Строка символов);
AddStrToTextFile(ring.txt, S1);
AddStrToTextFile(ring.txt, S2);
17.3. Файлы с типом
Файл состоит из любых однотипных компонент. Доступ к данным осуществляется через файловую переменную. В отличие от текстового файла в таком файле допустим прямой доступ к любой записи, причем в рамках открытого файла допустимо как записывать, так и читать записи.
Примеры объявления файловой переменной для файлов с типом:
Var
F1: File of String[45];
F2: File of Real;
F3: File of tRecord24;
После каждого чтения или вывода записи указатель автоматически устанавливается на следующую запись.
17.3.1. Процедуры и функции для работы с типизированным файлом
Procedure AssignFile( f: File of Type; FileName: String);
Связывает файловую переменную f с дисковым файлом FileName.
Procedure Rewrite( f: File of Type);
Создает новый файл и открывает его. Если файл существует, то он уничтожается и создается как новый.
Procedure Reset( f: File of Type);
Открывает существующий файл и устанавливает указатель на первую запись. При отсутствии файла возникает ошибка ввода/вывода.
Procedure Read( f: File of Type[; v1, v2, …,vN]);
Читает записи из файла и заносит их в переменные v1, v2, …, vN. Чтение начинается с той записи, на которую установлен указатель. Типы файла и переменных должны быть одинаковы.
Procedure Write( f: File of Type[; v1, v2, …,vN]);
Записывает данные из переменных v1, v2, …, vN в файл. Вывод данных начинается с той записи, на которую установлен указатель. Если указатель установлен на существующую запись, то при выводе она будет замещена новой записью. Если одновременно выводится несколько записей, то будет замещено такое же количество существующих записей. Типы файла и переменных должны быть одинаковы.
Procedure Seek( f: File of Type; N: LongInt);
Перемещает указатель на запись с номером N. Первая запись имеет порядковый номер 0.
Function FilePos( f: File of Type): LongInt;
Возвращает номер записи, на которую установлен указатель.
Procedure CloseFile( f: File of Type);
Закрывает файл.
Function Eof(f: File of Type): boolean;
Возвращает True, если достигнут конец файла.
Function FileSize(f: File of Type): LongInt;
Возвращает количество записей в файле. Например, Seek(f, FileSize(f)) установит указатель в конец файла (после последней записи).
Procedure Truncate(f: File of Type);
Уничтожает (отрубает) конец файла начиная с записи, на которую установлен указатель.
17.4. Файлы без типа
Файл состоит из компонент одинакового размера. Тип данных не имеет значения. Доступ к данным осуществляется через файловую переменную. Как и в файлах с типом, в таком файле допустим прямой доступ к любой записи, причем в рамках открытого файла допустимо как писать, так и читать записи.
Файловая переменная может быть объявлена так:
Var F: File;
После каждого чтения или вывода записи указатель автоматически устанавливается на следующую запись.
Отсутствие типа записи позволяет выполнять обработку файлов различных типов с помощью универсальных процедур и функций.
17.4.1. Процедуры и функции для работы с файлом без типа
Procedure AssignFile( f: File; FileName: String);
Связывает файловую переменную f с дисковым файлом FileName.
Procedure Rewrite( f: File);
Создает новый файл и открывает его. Если файл существует, то он уничтожается и создается как новый.
Procedure Reset( f: File[; Size: Word]);
Открывает существующий файл и устанавливает указатель на первую запись. При отсутствии файла возникает ошибка ввода/вывода. Параметр Size указывает размер записи открываемого файла. При его отсутствии размер записи по умолчанию равен 1.
Procedure BlockRead( f: File; Var Buf; Count: Word[; Var Result: Word]);
Читает из файла Count записей в переменную Buf. Result реально прочитанное количество записей.
Procedure BlockWrite( f: File; Var Buf; Count: Word[; Var Result: Word]);
Пишет в файл первых Count записей из переменной Buf. Result реально записанное количество записей.
Procedure Seek( f: File; N: LongInt);
Перемещает указатель на запись с номером N. Первая запись имеет порядковый номер 0.
Function FilePos( f: File): LongInt;
Возвращает номер записи, на которую установлен указатель.
Procedure CloseFile( f: File);
Закрывает файл.
Function Eof(f: File): boolean;
Возвращает True, если достигнут конец файла.
Function FileSize(f: File): LongInt;
Возвращает количество записей в файле. Например, Seek(f, FileSize(f)) установит указатель в конец файла (после последней записи).
Procedure Truncate(f: File of Type);
Уничтожает (отрубает) конец файла начиная с записи, на которую установлен указатель.
Язык Object Pascal не накладывает никаких ограничений на длину записи (теоретически она может иметь размер до 2 Гб).
Пример описания и обращения к функции ReadFromFile, читающей из файла nF в позиции Pos запись r размером Sz.
function ReadFromFile(nF: String; Pos: Word; Var r; Sz: Word): boolean;
Var
g: File;
Recs, ReadReal: Integer;
RecRead: boolean;
Begin
Assign(g, nF);
Recs:= FileSize(g) div Sz; {количество записей в файле}
RecRead:= (Pos < Recs); {запись с номером Pos есть ?}
if RecRead then begin {если запись есть}
Reset(g, Sz); {открыть файл}
try
Seek(g, Pos); {установить указатель на запись}
BlockRead(g, r, 1, ReadReal); {прочи