Текстовые файлы | Язык Паскаль

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

Текстовые файлы состоят из символьных строк переменной длины.

Каждая строка завершается специальной комбинацией "конец строки", которая состоит из двух символов: "перевод каретки" (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 прочитывается два раза. Первый раз для определения максимального числа, второй раз — для считывания чисел и их записи во второй файл.

Особенностью текстовых файлов является то, что они являются файлами последовательного доступа: нельзя прочитать какой-либо элемент текстового файла, не прочитав все предшествующие элементы. Аналогично нельзя записывать информацию в текстовый файл произвольным образом, писать в него можно только последовательно.