Файлы в паскале
Для идентификации файлов в паскале используют файловые переменные.Файловая переменная не может быть задана константой.
В отличии от файлов в языке СИ, в паскале в зависимости от способа представления информации различают три типа файлов в паскале, соответственно различаются и способы
описания файловых переменных
Файловая переменная типизированного файла описывается как:
Туре <идентификатор файловой переменной> = file оf <тип компонента>;
где <тип компонента> - любой тип данных, кроме файлового.
Типизированные файлы в паскале используют, когда обрабатывают хранящуюся в файле последовательность компонентов одинаковой длины
(чисел, записей и т.п.).
Файловая переменная текстового файла описывается как:
Туре <идентификатор файловой переменной> = text;
Текстовые файлы в паскале используют для работы с текстами, представленными в виде строк переменной длины.
Файловая переменная нетипизированного файла описывается как:
Туре <идентификатор файловой переменной> = file;
Нетипизированные файлы в паскале применяют для организации скоростного обмена между внешней и оперативной памятью физическими
записями указанной длины без преобразования и обработки.
Как и любая переменная языка Паскаль, файловая переменная может быть описана в инструкции объявления переменных.
Например:
Var F1: file of real;
F2:file:
F3: text;
или с предварительным объявлением типа:
Туре FF = file of integer;
Var F1: FF;
При необходимости файловую переменную допускается передавать в подпрограмму через параметры.
Однако следует помнить, что с этой целью можно использовать только параметры-переменные.
Например:
Туре FF = file of integer;
Procedure Print (Var F1:FF);
Работа с файлом включает:
Øинициализацию файловой переменной – установление связи файловой переменной с файлом;
Øоткрытие файла – подготовку файла для выполнения операций ввода/вывода;
Øобработку компонентов файла – выполнение операций ввода-вывода;
Øзакрытие файла (при повторном открытии файл закрывается автоматически).
Далее описываются процедуры для работы с файлами в паскале и приведены примеры их использования:
Связь между физическим устройством (дисководом или внешним устройством) и файловой переменной устанавливается
специальной процедурой.
Процедура
Assign (Var f; st:string)
инициализирует файловую переменную f, связывая ее с файлом или логическим устройством, определённым строкой st.
Если файл находится в текущем каталоге, то достаточно указать имя файла и его расширение. В противном случае необходимо
указать полное имя файла
Например:
Туре F = text;
Var f1, f2, f3: F;
...
Assign (fl, 'T1.dat'); {связывание файловой переменной с файлом в текущем каталоге}
Assign (f2, 'd:\iva\a.dat'): {связывание файловой переменной с файлом в указанном каталоге}
Assign(f3, 'CON'); {связывание файловой переменной с консолью}
Открытие файла предполагает указание направления передачи данных. В Паскале файл можно открыть
Øдля чтения
Øи для записи.
Текстовый файл можно открыть также для добавления строк.
В типизированный файл, открытый для чтения, можно дописывать новые записи или писать в нем новые записи на место старых.
Процедура
ReSet(Var f)
открывает файл, определенный файловой переменной f для чтения.
При выполнении этой процедуры указатель файла устанавливается на первый компонент файла (физически первый блок записей
считывается в буфер).
Логическое устройство в этом случае готовится к выполнению операций ввода.
При открытии для чтения несуществующего файла регистрируется ошибка выполнения, а функция lOResult типа Word возвращает
значение, отличное от 0 (см. далее описание функции).
Отключив контроль операций ввода-вывода и используя функцию lOResult, можно организовать проверку наличия файла с
указанным именем на диске.
Пример поиска файла на паскале:
Var f: file of char;
Begin
Assign(f, 'a.dat'); {инициализация файловой переменной}
{$ I- } {отмена контроля ошибок ввода-вывода}
ReSet (f); {открытие файла для чтения}
{$ I+ } {включение контроля ошибок}
if IOResult <>0 then
WriteLn ('Файл не существует');
else WriteLn('Файл существует');
Процедура
ReWrite(Var f)
открывает файл, определенный файловой переменной f, для записи.
ØПри открытии для записи существующего файла старый файл уничтожается без предварительной проверки и выдачи
предупреждения пользователю.
ØЕсли файла с таким именем не существовало, то он создаётся и подготавливается к записи (физически – очищается буфер).
Логическое устройство при этом подготавливается к приёму информации.
Процедура
AppEnd(Var f: text)
открывает текстовый файл, определённый файловой переменной f, для добавления строк.
При открытии для добавления строк указатель файла устанавливается на конец файла, и, соответственно, все строки,
выводимые в файл, дописываются к уже существующему файлу.
Любой программе без объявления, инициализации файловой переменной и открытия доступны два файла со стандартными
файловыми переменными:
ØINPUT – чтение со стандартного устройства ввода;
ØOUTPUT – вывод на стандартное устройство вывода.
Это текстовые файлы, используемые для выполнения элементарных операций ввода-вывода.
В операторах ввода-вывода файловые переменные этих файлов обычно не указывают. Остальные файлы становятся доступными
только после связывания файловой переменной с файлом или логическим устройством и открытия файла.
Стандартным устройством ввода по умолчанию является клавиатура.
Стандартным устройством вывода – экран дисплея.
На базе этих операций выполняют более сложные операции:
Øсоздание файла – занесение в файл требуемых записей;
Øмодификация файла – изменение всех или нескольких записей, добавление и удаление записей;
Øпоиск нужной информации в файле.
Выполнение этих операций осуществляется по-своему для каждого типа файла (см. параграфы далее).
Закрытие файла в паскале, открытого для записи или чтения, осуществляется процедурой
Close(Var f)
При этом вновь созданный файл регистрируется в каталоге.