Delphi. Файлы. Справка. Типизированный файл.

Подробное рассмотрение работы с текстовым файлом «Delphi работа с файлами«.

В типизированном файле информация хранится как набор последовательностей, имеющих одинаковую длину. Тип каждой последовательности может быть:

  1. Порядковый
  2. Вещественный
  3. Массив
  4. Запись
  5. Множество

Файловая переменная.

С помощью файловой переменной указывается тип файла.

  1. varF=TextFile; текстовый файл
  2. varF=File of тип_допустимый_для_типизированного_файла
    Например: varF=File of integer;
  3. varF=File; — нетипизированный файл.

Структура типизированного файла.

Так как файл состоит из одинаковых записей (то есть имеющих одинаковую длину), то появляется возможность перемещаться по файлу к нужной записи по номеру её позиции в файле.

Оператор AssignFile.

Этот оператор связывает файловую переменную и путь доступа к файлу. Формат оператора:

AssignFile(varF, «путь_доступа_к_файлу»)

Создание нового файла.

Процедура ReWrite(varF) либо создаёт новый файл, либо уничтожает уже имеющийся и на его месте создаёт новый.

Открытие существующего файла.

Существующий типизированный файл можно открыть для чтения/записи

процедурой Reset(varF) открывает файл для чтения (или переоткрывает его). Указатель файла перемещается в начальную позицию.

Переход к записи номер N.

Если необходимо прочитать запись номер N (номера отсчитываются от нуля), то применяют процедуру позиционирования файлового указателя seek(varF,N);

Определение позиции файлового указателя.

Позицию файлового указателя возвращает функция FilePos(varF).

Определение количества записей в файле.

Количество компонентов в файле определяется функцией FileSize(varF).

Примеры

Файл для хранения коротких строк.

procedure TForm1.Button1Click(Sender: Tobject);
type t10=string[10];
var varF:file of t10; s10,s1,s2,s3:t10;
begin
assignfile(varF,’myFile’);
rewrite(varF);

s10:=’1a23′;
write(varF,s10);
s10:=’45b6′;
write(varF,s10);
s10:=’78c90′;
write(varF,s10);

reset(varF);
read(varF,s1,s2,s3);
edit1.Text:=s1;
edit2.Text:=s2;
edit3.Text:=s3;

closeFile(varF);
end;

//Замечание 1. Нельзя объявить переменные непосредственно:
var varF:file of string[10]; s10,s1,s2,s3:string[10]; Компилятор не пропустит такое определение. Поэтому надо предварительно описать тип:
type
t10=string[10];

//Замечание 2. Такой же результат, как в вышеприведённом примере, будет, если записать:

s1:=’1a23′;
s2:=’45b6′;
s3:=’78c90′;
write(varF,s1,s2,s3);

//Замечание 3. Записать в конец файла. Устанвливаем указатель в конец файла: seek(varF, FileSize(varF)) и далее производим запись.

//Замечание 4. Можно последовательно читать каждую запись по отдельности, например Read(varF,s10); В нашем примере повторяем этот оператор три раза, чтобы прочитать все три значения.

Файл для хранения целых чисел.

procedure TForm1.Button2Click(Sender: Tobject);
var varF:file of integer; i,ii,iii,n:integer;
ar:array of integer;
begin
assignfile(varF,’4.txt’);
rewrite(varF);
i:=123;
ii:=456;
iii:=7890;
n:=13647;
write(varF,i,ii);
write(varF,iii,n);
reset(varF);
read(varF,i,ii,iii,n);
edit1.Text:=inttostr(i);
edit2.Text:=inttostr(ii);
edit3.Text:=inttostr(iii);
edit4.Text:=inttostr(n);
closeFile(varF);
end;

В результате:

Файл записей

procedure TForm1.Button3Click(Sender: Tobject);
type tr=record s:string[10]; i:integer end;
var varF:file of tr; s1,s2,s3,s10,ss10,sss10:tr;
begin
assignFile(varF,’myFile.txt’);
rewrite(varF);

s10.s:=’1a23′;
ss10.s:=’45b6′;
sss10.s:=’78c90′;

s10.i:=11;
ss10.i:=22;
sss10.i:=333;

write(varF,s10,ss10,sss10);


reset(varF);
read(f,s1,s2,s3);
edit1.Text:=s1.s+’ ‘+inttostr(s1.i);
edit2.Text:=s2.s+’ ‘+inttostr(s2.i);
edit3.Text:=s3.s+’ ‘+inttostr(s3.i);

closeFile(varF);
end;

В результате после чтения файла будем иметь:

Файл массивов

procedure TForm1.Button4Click(Sender: Tobject);
type art=array[1..3] of integer;
var ar:art; ft:file of art;
begin
assignfile(varF,’myFile’);
rewrite(varF);
ar[1]:=123;
ar[2]:=456;
ar[3]:=7890;

write(varF,ar);

reset(varF);
read(ft,ar);

edit1.Text:=inttostr(ar[1]);
edit2.Text:=inttostr(ar[2]);
edit3.Text:=inttostr(ar[3]);

closeFile(ft);

end;

В результате:

***

Обновлено: 20.11.2021 — 11:59