Сегодня мы закончим повествование о работе с файлами. Особое место в Паскале занимают текстовые файлы. Не путайте с файлами, у которых расширение txt. У текстовых файлов может быть любое расширение (в том числе и txt :). Давайте определимся, что мы будем иметь в виду, говоря "текстовый файл".
Текстовый файл - файл, состоящий из строк, которые в свою очередь состоят из символов. Строки могут иметь переменную длинну, каждая строка завершается символом конца строки.Для работы с файлом мы должны создать файловую переменную, для текстовых файлов эта переменная стандартного типа Text.
varОткрываются и закрываются текстовые файлы так же как и типовые. Соответственно процедуры для чтения и записи те же. Так же можно считать/записать строку целиком с помощью процедур ReadLn / WriteLn, указав первым параметром файловую переменную. Однако для работы с текстовыми файлами введены дополнительные функции и процедуры:
F : Text;
- function Eoln (var F: Text) : Boolean; Эта функция принимает значение trUE, если достигнут конец строки, и значение FALSE, если конец строки не достигнут. Название от англиского: EndOfLiNe - конец линии (строки).
- function SeekEoln (var F: Text) : Boolean; Возвращает значение trUE, если до конца строки остались только пробелы, и FALSE в противном случае.
- function SeekEof (var F: Text) : Boolean; Возвращает значение trUE, если до конца файла остались только строки из пробелов, и FALSE в противном случае.
- procedure Append(var f: Text); открывает текстовый файл для дозаписи в конец файла.
- procedure SetTextBuf(var F: Text; var Buf; Size: Word ); служит для увеличения или уменьшения буфера ввода - вывода текстового файла f. Значение размера буфера для текстовых файлов по умолчанию равно 128 байтам. Увеличение размера буфера сокращает количество обращений к диску. Рекомендуется изменять размер буфера до открытия файла. Буфер файла начнется с первого байта переменной Buf. Размер буфера задается в необязательном параметре Size, а если этот параметр отсутствует, размер буфера определяется длиной переменной Buf.
- procedure Flush(var F: Text); применяется к открытым для записи файлам. Она принудительно записывает данные из буфера в файл независимо от степени его заполнения.
function FileSize(var F): Longint;возвращает размер файла F в блоках. Помните, что в зависимости от того как представлен у вас файл (какого типа) результат может быть различным. Например:
type
fb = file of byte;
fi = file of integer;
var
f1 : fb;
f2 : fi;
begin
Assign (f1, 'E:\Result.txt');
Assign (f2, 'E:\Result.txt');
reset (f1);
reset (f2);
writeLn ('Size of f1 - ', FileSize (f1));
writeLn ('Size of f2 - ', FileSize (f2))
end.
результат на экране будет различным. Почему? Для хранения переменной типа byte в памяти отводится 1 байт, и следовательно файл будет представлен, как последовательность блоков, размером в 1 байт. Поэтому FileSize (f1) даст нам размер файла в байтах. Для хранения же переменной типа integer отводится 2 байта, поэтому FileSize (f2) даст результат в 2 раза меньше, т.к. один блок будет у нас 2 байта. При считавание данных из файла смещнение относительно начала меняется. Т.е. считали одно число - смещение +1, считали два - смещение +2 и т.д. Что бы узнать смещение относительно начала файла применяется функция:
function FilePos(var F): Longint;для только что открытого файла смещение (а значит и результат FilePos) будет равно 0. Для файла дочитанного до конца FilePos = FileSize.
procedure Seek(var F; N: Longint);эта процедура позволяет передвигать текущую позицию по файлу (номер блока указывается в N). Например начало файла: Seek (F, 0), конец Seek (F, SizeOf (F)).
procedure truncate(var F);эта процедура обрезает файл, устанавливая на текущее смещение символ EOF. Не может применятся к текстовым файлам.

