Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование.docx
Скачиваний:
192
Добавлен:
28.03.2015
Размер:
383.85 Кб
Скачать

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

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

var f,f1: Text;

a,max: LongInt;

flag: Boolean;

begin

Assign(f,'f.txt');

Reset(f);

while not Eof(f) do begin

Read(f,a);

if a>max then

max := a;

end;

Assign(f1,'f1.txt');

Rewrite(f1);

Reset(f);

while not Eof(f) do begin

Read(f,a);

if a<>max then

WriteLn(f1,a);

end;

Close(f);

Close(f1);

end.

В примере файл f.txt прочитывается два раза. Первый раз для определения максимального числа, второй раз — для считывания чисел и их записи во второй файл. Данный алгоритм используется, если максимальных чисел в файле несколько.

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

Просмотр файла

var f:text; x:byte;

begin assign (f, ‘f.pas’); reset (f); while not eof (f) do begin read (f,x); if eoln (f) then writeln (x:3) else write (x:3); end; end.