До этого момента наши программы результат своей работы выдавали на экран. Это не всегда удобно. Язык Паскаль позволяет сохранить результаты работы программы в файле на диске компьютера.
Файл, с точки зрения программы на языке Паскаль, ¾ это именованная структура данных, представляющая собой последовательность элементов одного типа. Количество элементов файла практически не ограничено. В первом приближении файл можно рассматривать как массив переменной длины неограниченного размера.
Как и любая переменная программы, файл должен быть объявлен в разделе описания переменных. При объявлении файла указывается тип элементов файла. В общем виде объявление файла выглядит так:
Имя : file of Тип Элементов
Примеры: f : file of Integer { файл целых чисел } ;
sigma : file of Real { файл вещественных чисел } ;
rez : file of Char { файл символов } ;
Файл, копонентами которого являются данные символьного типа (CHAR), называется текстовым. Описание FILE OF CHAR может быть заменено на TEXT, т. е. описание rez : file of char эквивалентно описанию rez : text.
Объявление файловой переменной задает только тип компонентов файла. Чтобы программа могла выводить данные в файл или читать данные из файла, необходимо указать конкретный файл, т. е. задать имя файла. Имя файла задается вызовом процедуры ASSIGN, связывающей файловую переменную с конкретным файлом. Описание процедуры ASSIGN:
assign ( var f : text ; Имя Файла : string ) ;
Имя файла задается согласно принятым в MS-DOS правилам. Оно может быть полным, т.е. состоять не только непосредственно из имени файла, но и включать путь к файлу.
Примеры:
assign ( f , ‘a:\resultat.txt’ ) ;
assign ( f, ‘e:\students\ivanov\kof.dat’ ) ;
fname := ‘otchet.txt’ ;
assign (f, fname) ;
Непосредственно вывод в текстовый файл осуществляется при помощи инструкции WRITE или WRITELN, у которой список выводимых значений начинается с переменной типа TEXT, идентифицирующей файл для вывода. Например, если переменная f имеет тип TEXT, то инструкция вывода в файл может быть такой:
write ( f , ‘ Корни уравнения ‘, x1, x2 ) ;
Однако для того чтобы инструкция WRITE вывела данные в файл, не достаточно назначить имя файловой переменной. Нужно еще открыть файл для вывода.
Перед выводом в файл необходимо открыть файл. Если программа, формирующая выходной файл, уже использовалась, то возможно, что файл с результатами работы программы уже есть на диске. Поэтому программист должен решить, как поступить со старым файлом. Это определяется во время открытия файла.
Возможны следующие режимы (варианты) открытия файла для записи в него данных:
* перезапись (запись нового файла поверх существующего или создание нового файла);
* добавление в существующий файл.
Чтобы открыть файл в режиме создания нового файла или замены существующего, необходимо вызвать процедуру REWRITE(f), гдеf ¾ файловая переменная типа TEXT.
Чтобы открыть файл в режиме добавления в существующий файл, необходимо вызвать процедуру APPEND(f), гдеf ¾ файловая переменная типа TEXT.
Следующая программа открывает файл в режиме создания нового файла и записывает в него 5 строк.
var
f : text ; { текстовый файл }
i : integer ;
begin
assign (f, ‘test.txt’) ;
rewrite ( f ) ; { открыть в режиме перезаписи }
for i := 1 to 5 do
writeln(f, ‘Строка ‘ , i ) ;
close(f) { закрыть файл }
end.
В результате выполнения программы на диске появляется файл test.txt.
Вот его содержимое:
Строка 1
Строка 2
Строка 3
Строка 4
Строка 5
Следующая программа открывает созданный предыдущей программой файл и записывает в него две строки.
var
f : text ; { текстовый файл }
i : integer ;
begin
assign (f, ‘test.txt’) ;
rewrite ( f ) ; { открыть в режиме перезаписи }
for i := 6 to 7 do
writeln(f, ‘Строка ‘ , i ) ;
close(f) { закрыть файл }
end.
В результате выполнения программы содержимое файла test.txt изменяется.
Его содержимое станет таким:
Строка 6
Строка 7
Следующая программа тоже открывает файл test.txt, но уже в режиме добавления, и записывает в него три строки.
var
f : text ; { текстовый файл }
i : integer ;
begin
assign (f, ‘test.txt’) ;
append ( f ) ; { открыть в режиме добавления }
for i := 8 to 10 do
writeln(f, ‘Строка ‘ , i ) ;
close(f) { закрыть файл }
end.
После выполнения приведенной программы содержимое файла test.txt опять меняется.