while not eoln(f) do begin read(f,c); write(c); end;
readln(f);
writeln;
end;
close(f);
readln;
end.
А теперь перейдём к процедурам записи в файл. Перед тем как что-либо записывать, нужно создать новый (пустой) файл или стереть содержимое существующего. Для этого используется процедура
rewrite(TxtFile: text);
До её вызова файловая должна быть привязана к имени файла на диске с помощью assign. Если файл не существовал, то rewrite создаст его, если существовал, то содержимое будет стёрто. В любом случае файл будет пустым, а указатель записи стоит на начале файла.
Здесь в качестве параметров p1, p2, ... pN можно использовать не только переменные, но и выражения: числовых типов, строковые, символьные и логические (boolean). В отличие от write, writeln после записи в файл значений p1, p2, ... pN переводит указатель записи на начало новой строки; writeln с одним параметром (текстовый файл) лишь переводит указатель на новую строку.
Так же как и в случае с чтением из файла, после того как все данные записаны файл нужно закрыть с помощью close.
Пример 2 (запись в файл). Пусть дан произвольный текстовый файл, требуется получить другой файл, в каждой строке которого записана длина соответствующей строки исходного файла:
program WriteLength;
var f1,f2: text;
s: string;
assign(f1,'writelen.pas'); reset(f1);
assign(f2,'result.txt'); rewrite(f2);
while not eof(f1) do begin
readln(f1,s);
writeln(f2,length(s));
end;
close(f1); close(f2);
end.
Ещё один способ записи — это открытие для добавления информации в конец файла. Для этого используется процедура
append(TxtFile: text);
Если файл открыт с помощью append, то всё его содержимое сохраняется. При завершении дописывания в конец файла его также следует закрыть с помощью close.
Двоичный файл представляет собой последовательность одинаковых элементов, записанных на диске. В отличие от текстовых файлов, в двоичных нет разбиения на строки, файл напоминает массив, с той лишь разницей, что доступ к элементам может быть только последовательным. Для того, чтобы определить, достигнут ли конец файла, по-прежнему используется функция eof. Функция eoln, очевидно, здесь неприменима.
Для всех обсуждаемых ниже файлов можно выполнять те же процедуры открытия, закрытия и привязки, что и для текстовых: Append, Assign, Close, Reset, Rewrite. Кроме того, появляется процедура Truncate(var f: file), которая уничтожает всё содержимое файла, находящееся после текущего указателя чтения.
Двоичные файлы будем делить на типизированные и нетипизированные.