3. Открытие файлов.
В отличие от других типов Паскаля, для работы с файловой переменной (доступа к файлу) необходимо выполнить открытие файла - некоторые подготовительные действия, обусловленные спецификой файлового типа данных. Подготовительные действия по открытию файла включают:
- связывание файловой переменной с именем конкретного файла на внешнем устройстве;
- инициализация (начальная установка) файла в соответствии с характером последующих операций с файлом;
В Паскале каждое из этих действий выполняется специальной процедурой.
Для связывания файловой переменной с именем файла предусмотрена стандартная процедура
assign(<имя файловой переменной>,<имя файла или логического устройства>);
Если второй параметр этой процедуры - пустая строка, то имеется в виду стандартный файл input или output. Во всех других случаях второй параметр - имя файла, соответствующее имени в MS DOS (имя файла содержит явно или неявно путь к файлу), либо имя логического устройства.
Имена логических устройств - это специальные имена, принятые в Турбо Паскале для доступа к стандартным внешним устройствам: con - консоль (клавиатура или экран монитора), prn - принтер (если принтеров несколько, то они именуются LPT1, LPT2 и т.д.), aux - коммуникационный канал, nul - "пустое" устройство.
Инициализация файла указывает направление передачи данных между оперативной памятью и файлом. В Паскале предусмотрены 3 стандартные процедуры инициализации файла: для чтения, для записи (создания файла), для добавления записей в существующий файл. Записи файла нумеруются, начиная с 0.
Инициализация файла для чтения - установка файла для чтения 0-записи:
reset (<файловая переменная >);
Для текстовых файлов, открытых процедурой reset, недопустимо использовать процедуры вывода в файл (write, writeln), а для типизированных файлов - допустимо использовать как процедуры read (для чтения записи файла) и write (для обновления записей).
Инициализация файла для создания файла:
rewrite(<файловая переменная>);
Эта процедура создает новый пустой файл с именем, указанным ранее в процедуре связывания assign (если имя файла совпадает с ранее существующим файлом, то он стирается). Новый файл подготовлен к добавлению в него информации процедурой write (для типизированных файлов) или write, writeln (для текстовых файлов).
Инициализация файла для добавления записей в конец имеющегося файла:
append(<файловая переменная >);
Эта процедура устанавливает файл на конец последней записи и открывает доступ процедурам write, writeln для расширения файла новыми строками. Она применима только к текстовым файлам (для типизированных файлов её функции можно выполнять при открытии файла процедурой reset). Заметим, что для текстовых файлов в Паскале не предусмотрено средств обновления существующих строк-записей.
4. Стандартные процедуры и функции работы с файлами.
В Турбо Паскале предусмотрено около двух десятков стандартных процедур и функций для работы с файлами. Остановимся лишь на важнейших из них.
Процедура close (<файловая переменная>);
Эта процедура закрывает файл, сохраняя связь, установленную соответствующей процедурой assign. Особенно важна процедура close для режима добавления записей в файл: при её отсутствии возможны ситуации, когда информация, записываемая в файл, "застрянет" в буфере, в котором накапливаются записи. При нормальном завершении программы функции процедуры close выполняются автоматически (даже при её отсутствии в программе) для всех открытых для чтения файлов.
Процедура erase (<файловая переменная>);
Эта процедура уничтожает файл, ей должна предшествовать процедура close.
Процедура read([<файловая переменная>],<список переменных>);
Выполняет чтение очередных записей из файла типа text или типизированного файла. Для файла input файловая переменная может быть опущена; переменные списка должны быть типа, соответствующего типу записи файла, им присваиваются значения прочитанных из файла записей.
Процедура write([<файловая переменная>],<список выражений>);
Выполняет добавление очередной записи в файл типа text или типизированный файл. Для файла output файловая переменная может быть опущена; выражения списка должны быть типа, соответствующего типу записи файла.
Функция eof(<файловая переменная>);
Логическая функция, определяющая конец файла. Её значение true, если достигнут конец файла и false в противном случае.
Функция IOResult.
Вырабатывает признак последней операции ввода-вывода. Если операция завершилась успешно, IOResult=0, если неуспешно - IOResult <>0. Эта функция доступна только при отключенном автоконтроле ошибок ввода-вывода (директивой компилятора {$I-}). Функция IOResult часто используется для контроля существования файла при его открытии (это будет проиллюстрировано в последующих примерах программ).