Содержание
Подробное рассмотрение работы с текстовым файлом «Delphi работа с файлами«.
В типизированном файле информация хранится как набор последовательностей, имеющих одинаковую длину. Тип каждой последовательности может быть:
- Порядковый
- Вещественный
- Массив
- Запись
- Множество
Файловая переменная.
С помощью файловой переменной указывается тип файла.
- varF=TextFile; текстовый файл
- varF=File of тип_допустимый_для_типизированного_файла
Например: varF=File of integer; - 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;
В результате:
***