Работа с данными типа файл.
Файл – это именованная область внешней памяти – приемник или источник информации.
Любой файл имеет три особенности:
1.есть имя => можно работать с несколькими файлами одновременно
2.содержит компоненты одного и того же типа, но сами компоненты могут быть любого типа, кроме типа файла или типа указателя
3.длина заранее не оговаривается.
Файловый тип или файловую переменную в программе можно задать одним из трех способов:
1. <имя> = file of <тип> типизированный файл,
2. <имя> = text текстовый файл,
3. <имя> = file нетипизированный файл.
Нас пока интересуют только текстовые файлы.
Var f: text;
В любой программе существуют по умолчанию два стандартных файла ввода – вывода, которыми мы пользовались: input и output.
Любые другие файлы в программе становятся доступны после выполнения процедуры связывания с конкретным внешним файлом.
Смысл этой операции состоит в том, что
1.описанная файловая переменная связывается с именем уже существующего или создаваемого файла,
2.указывается направление обмена информацией: чтение или запись.
assign(<файловая переменная>, <имя файла>);
здесь < файловая переменная > - идентификатор описанной выше переменной типа файла, < имя файла > - текстовое выражение (Если оно пустое, то подразумевается стандартный файл input или output в зависимости от направления обмена.)
Например:
Var
f: text;
Begin assign(f,’ABC.txt’); …….
Имя файла можно задавать в программе:
Var f:text;
st:string;
Begin writeln(‘Введите имя файла’);
readln(st);
assign(f,st); ………
После связывания файловой переменной с внешним файлом нужно указать направление передачи данных. Файл может быть открыт на чтение, на запись или на чтение и запись одновременно.
Ø Для чтения файл инициируется процедурой RESET.
Формат вызова такой
RESET(< файловая переменная> );
Если до этого вызова файловая переменная не была связана с конкретным внешним файлом, то будет попытка инициировать чтение из несуществующего файла.
Если файл текстовый, то процедуры, то процедуры write и writeln после RESET не разрешены.
Ø Для записи файл инициируется процедурой REWRITE.
Формат вызова такой
REWRITE(< файловая переменная> );
Этой процедурой нельзя инициировать запись информации в уже существовавший ранее дисковый файл. Если попытаться это сделать, то старый файл уничтожится и создается новый файл, который готов к приему информации. При этом никаких сообщений об этих действиях не будет выдаваться.
Ø Для записи в уже существующий файл с целью его расширения можно воспользоваться процедурой APPEND. Эта процедура применима только к текстовым файлам.
Формат вызова такой
APPEND(< файловая переменная> );
Если файл уже был инициализирован процедурами RESET или REWRITE, то он сначала будет закрыт, а потом снова открыт на запись.
Рассмотрим некоторые процедуры и функции для работы с файлами.
1. CLOSE(<файловая переменная>) - закрывает файл, но связь с файловой переменной сохраняется, поэтому можно снова открыть без ASSIGN. Обеспечивается сохранность всех записей файла.
2. RENAME(<файловая переменная>, <новое имя>) – переименовывает файл. Если он был открыт, то перед вызовом его необходимо закрыть.
3. ERASE(<файловая переменная>) – уничтожает файл. Перед выполнением файл необходимо закрыть.
4. EOF(<файловая переменная>):boolean. Функция тестирует конец файла и выдает значение true, если указатель находится в конце файла. При записи это означает, что добавление выполняется в конец файла, а при чтении, что файл исчерпан.
ТЕКСТОВЫЕ ФАЙЛЫИ РАБОТА С НИМИ.
Чаще всего в программах используются текстовые файлы, поэтому рассмотрим работу с ними более подробно.
Текстовые файлы связываются с файловыми переменными, принадлежащими стандартному типу TEXT. Они предназначены для хранения текстовой информации. Компоненты текстового файла могут иметь переменную длину, откуда следуют особенности работы с ними. Текстовые файлы трактуются Паскалем как совокупность строк переменной длины. Доступ к каждой строке возможен только последовательно, начиная с первой. При создании текстового файла в конце каждой строки ставится специальный признак EOLN, а в конце всего файла – EOF. Чтобы поставить признак конца строки EOLN, нужно нажать клавишу <enter>, а для закрытия файла – сочетание двух клавиш <ctrl> + <z>. Эти признаки можно протестировать одноименными логическими функциями. Они выдают истину, если достигнуты конец строки и конец файла, соответственно.
При работе с текстовыми файлами используются процедуры:
1.READ – обеспечивает ввод символов, строк и чисел.
Формат вызова
READ(<файловая переменная>,<список ввода>)
или READ(<список ввода>), если применяется к файлу input.
<список ввода> - последовательность из 1 или нескольких переменных типа char, real, integer. Максимальная длина буфера ввода 127 символов.
Процедура ввода удобно устроена для ввода чисел, например, для ввода элементов массива можно написать:
Const N=1000;
var f: text;
a:array[1..N] of real;
i:integer;
Begin assign(f, ‘prog.dat’);
reset(f);
i:=1;
while not EOF(f) and (i<=N)
do begin read(f, a[i]); i:=i+1
end;
close(f);
…..
…..
End.
2.write – выводит информацию в текстовый файл.
Формат вызова
write(<файловая переменная>,<список вывода>), где
<файловая переменная> - переменная, описанная как text и связанная процедурой ASSIGN или write(<список вывода>), если вывод производится в стандартный файл output, то есть на экран.