Текстовые файлы в Паскаль
Текстовые файлы состоят из символьных строк переменной длины.
Каждая строка завершается специальной комбинацией "конец строки", которая состоит из двух символов: "перевод каретки" (ASCII-код #13
) и "перевод строки" (#10
).
Завершается текстовый файл символом "конец файла" (#26
).
Объект текстового файла может быть присвоен переменной типа Text
. Ее объявление:
var файловая_переменная: Text;
Чтение из текстового файла выполняется операторами read
и readln
.
Чтобы прочитать данные из файла, в качестве первого параметра указывают имя файловой переменной, далее через запятую перечисляются переменные, в которые осуществляется чтение данных из файла.
Если элемент данных может быть преобразован в число, это преобразование осуществляется автоматически при вводе в числовые переменные. Элементы числовых данных в строках текстового файла разделяются пробелами или символами табуляции.
Если строка файла закончилась, а состоящий из числовых или символьных переменных список параметров в read
не исчерпался, то начинает считываться следующая строка.
При вводе данных из текстового файла в символьные переменные элементы данных не разделяются.
Если в списке данных после числовой переменной идет строковая, то пробел, который следует после числового значения в файле, считывается в строку (это же справедливо и при считывании в символьную переменную).
Отличие операторов read
и readln
при чтении из текстовых файлов состоит в том, что оператор readln
, поместив значение в последнюю переменную списка параметров, переходит на начало следующей строки, не считывая оставшиеся в строке данные. С другой стороны, оператор read
остается готовым считывать данные со следующей позиции текущей строки. Предположим, что в текстовом файле f имеются две строки:
1 -2
4
В этом случае два оператора read(f, m); read(f, n);
поместят в целочисленные переменные m и n соответственно значений 1 и -2, а два оператора readln(f, m); readln(f, n);
считают значения 1 и 4.
Рассмотрим пример. В текстовом файле f.txt через пробел и Enter записаны целые числа. Переписать в файл f1.txt из файла f.txt все числа, за исключением максимальных (предполагается, что их может быть несколько).
var
f, f1: text;
a, max: integer;
begin
assign(f, 'f.txt');
reset(f);
max := -1;
while not eof(f) do begin
read(f, a);
if a > max then
max := a;
end;
reset(f);
assign(f1,'f1.txt');
rewrite(f1);
while not eof(f) do begin
read(f, a);
write(a, ' ');
if a <> max then
write(f1, a, ' ');
end;
close(f);
close(f1);
end.
В примере файл f.txt прочитывается два раза. Первый раз для определения максимального числа, второй раз — для считывания чисел и их записи во второй файл.
Особенностью текстовых файлов является то, что они являются файлами последовательного доступа: нельзя прочитать какой-либо элемент текстового файла, не прочитав все предшествующие элементы. Аналогично нельзя записывать информацию в текстовый файл произвольным образом, писать в него можно только последовательно.