Delphi. Файлы. Справка. Текстовый файл.

Файл — структура данных, находящаяся на носителе данных (энергонезависимом или энергозависимом).

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

Типы файлов.

В Delphi различают три типа файлов:

  1. текстовые
  2. типизированные
  3. нетипизированные

Текстовые файлы.

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

Типизированный файл.

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

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

Нетипизированные файлы.

Исходная информация переводится в двоичный вид, разбивается на блоки одинакового объёма и записывается на носитель.

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

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

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

Оператор AssignFile.

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

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

Запись в текстовый файл.

Запись осуществляется операторами WriteLn и Write

Процедура WriteLn.

Формат процедуры:

Procedure WriteLn( varF, Var1,Var2,Var3, … , VarI, … , VarN)

Процедура записывает символьные представления переменных. После переменной VarN будет записан признак конца строки EOLN (End of Line).

Это делается с помощью двух следующих друг за другом символов с кодами #13 и #10.

Чтобы записать следующую строку, надо вновь применить процедуру WriteLn, и так далее.

Например. s1:=’123′; s2:=’abc’; s3:=’456′; s4:=’xyz’;WriteLn( varF, s1,s2); WriteLn( varF,s3,s4); Будут сфомированы две строки:

При закрытии файла последним записывается символ EOF (End of File) с кодом #26.

Формат записи в файл.

Запись производится посимвольно. Каждый символ занимает 1 байт (или 2 байта в системе Unicode). Например, слово АБВГ займёт 4 байта, а целое число 123456 займёт 6 байт.

Процедура Write.

Она аналогична процедуре WriteLn,но не вставляет символы конца строки. Если в предыдущем примере заменить WriteLn на Write, то будем иметь:

Процедура ReadLn.

Однократное применение рпоцедуры приводит к считыыванию одной строки.

Например. Файл записан двукратным применением процедуры WriteLn. Применим двукратно процедуру ReadLn(varF,s); где s — строковая переменная.

Первое прочтение даст s=’123abc’, а второе s=’456xyz’.

Замечание 1. Хотя во многих учебниках говорится, что справедлива форма процедуры ReadLn(varF,s,s1,s2, …, sN);, практика показывает, что считывание производится только в переменную s. Остальные переменные принимают значение «пусто».

Замечание 2.Если применить процедуру в виде ReadLn(varF), то будет просто пропущена очередная запись.

Процедура Read.

Если файл записан с помощью процедуры WriteLn, то процедура Read стчитывает только первую запись. Второе применение Read приводитк тому же результату, то есть считываение не идёт дальше первой записи.

Если файл записан с помощью процедуры Write, то Read(varF,s) прочитает весь файл до конца и разместит его содержимое в переменной s.

Например. Если файл сформирован с помощью процедуры Write (как показано выше):

то Read(varF,s) вернёт s=123abc 456xyz.

Запись чисел в текстовый файл.

Целые и вещественные числа записываются обычным образом.

Например, writeLn(varF,i); где i — переменная целого типа. Аналогично записывается вещественное число.

Запись числа можно считать или обычным образом, представив его в виде строки: ReadLn(varF,s), или непосредственно в формате целого числа: ReadLn(varF,i).

Для вещественного числа процедура ReadLn(varF,s)вернёт:

Пара операторов:

readLn(varF,r);

edit4.Text:=floatToStr(r); где r — переменная вещественного типа, вернёт:

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

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

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

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

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

Добавление записей в существующий файл.

Добавить новую запись в текстовый файл можно только в его конец.

Процедура Append(varF) открывает текстовый файл для добавления записи в конец текстового файла.

Пример.

procedure TForm1.Button1Click(Sender: Tobject);
var f:textFile;
begin
assignFile(f,’myTextFile.txt’);//так как не указан полный путь доступа к файлу, он запишется в папку с «.exe» файлом программы.
rewrite(f);//создаем (или пересоздаём) файл
//пока ничего не записываем
closeFile(f);//закрываем файл. Если файл не закрыть, к нему нельзя будет обратиться из другого процесса (например, попытка чтения self.ListBox1.Items.LoadFromFile(‘myTextFile.txt’); вызовет ошибку);
end;

procedure TForm1.Button2Click(Sender: Tobject);
var s,s1:string; f:textFile;
begin
assignFile(f,’myTextFile.txt’);
append(f);//открываем файл для добавления записей

s:=’123′;
s1:=’abc’;
writeLn(f,s,s1);//записываем первую строку
s:=’456′;
s1:=’xyz’;
writeLn(f,s,s1);//записываем вторую строку

closeFile(f);//закрываем файл

self.ListBox1.Items.LoadFromFile(‘myTextFile.txt’);//отображаем содержимое файла в компоненте ListBox1

end;

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

procedure TForm1.Button3Click(Sender: Tobject);
var s,s1,s2,s3,s4:string; f:textfile; i,ii:integer; c:char; r:real;
begin

assignfile(f,’3.txt’);

reset(f);//открываем текстовый файл для чтения

readLn(f,s);//читаем первую строку
self.Memo1.Lines.Add(s);//добавляем строку в компонент «Tmemo»
readLn(f,s);//читаем вторую строку
self.Memo1.Lines.Add(s);

closeFile(f);

end;

В результате будем иметь:

procedure TForm1.Button4Click(Sender: Tobject);
var s,s1:string; f:textFile;
begin
assignFile(f,’myTextFile.txt’);
append(f);//открываем файл для добавления записей

s:=’123′;
s1:=’abc’;
write(f,s,s1);//записываем первую строку
s:=’456′;
s1:=’xyz’;
write(f,s,s1);//записываем вторую строку

closeFile(f);//закрываем файл

self.ListBox1.Items.LoadFromFile(‘myTextFile.txt’);//отображаем содержимое файла в компоненте ListBox1

end;

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

procedure TForm1.Button5Click(Sender: Tobject);
var s,s1:string; f:textFile;
begin

assignfile(f,’3.txt’);

reset(f);

read(f,s);
self.Memo1.Lines.Add(s);

closeFile(f);

end;

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

Посимвольное прочтение файла.

procedure TForm1.Button6Click(Sender: Tobject);
var s,s1:string; f:textFile; c:char;
begin

assignfile(f,’3.txt’);

reset(f);

repeat
read(f,c);
memo1.Lines.Add(c);
until eoln(f);//читаем посимвольно до тех пор, пока не достигнем конца строки

repeat
read(f,c);
memo1.Lines.Add(c);
until eoln(f);

closeFile(f);

end;

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

Замечание. Можно сразу прочитать весь файл до конца:

repeat
read(f,c);
memo1.Lines.Add(c);
until eof(f);//завершить, когда будет достигнут конец файла.

***

Обновлено: 18.11.2021 — 12:01