Теоретический материал: файловый ввод-вывод (Паскаль)
Процедуры и функции для работы с типизированными файлами
Вспомним, что типизированный файл - это линейная последовательность элементов одного типа. При каждом обращении к файлу (чтении, записи) его текущий указатель перемещается к следующему элементу. Возникает вопрос: можно ли нарушить порядок доступа к элементам файла и, например, не считывая из файла первый и второй элемент, сразу обратиться к третьему? Оказывается, можно.
Для изменения теущего положения указателя используется процедура
Seek (МуFilе, n);
|
где n - требуемое положение указателя.
Внимание! Нумерация элементов типизированного файла начинается с нуля.
Следовательно, для обращения к третьему элементу нужно записать: Seek (МуFilе, 2).
Seek (МуFilе, 0) - устанавливает указатель в начальную позицию (на первый элемент).
Seek (МуFilе, FileSize(МуFilе)) - устанавливает указатель после последнего элемента, то есть на признак конца файла.
Примечание. Функция FileSize(МуFilе) возвращает количество элементов типизированного файла МуFilе.
Текущую позицию указателя дает функция
FilePos (МуFilе);
|
Рассмотрите пример.
Задача. Составить программу, которая переписывает существующий файл, заменяя все латинские буквы на заглавные.
Рrogram Writing;
|
Функция IOResult
Как Вы уже заметили, в предыдущей программе была использована функция IOResult. Рассмотрим, какую роль выполняет эта функция.
Функция IOResult позволяет программисту самостоятельно обработать ошибки, возникающие при работе с файлами, избжав тем самым автоматического завершения программы с выдачей непонятного пользователю аварийного сообщения.
Если контроль за выполнением операций ввода/вывода отключен с помощью директивы компилятора {$I-}, функция возвращает признак наличия ошибки в процессе выполнения последней операции ввода/вывода. При успешном завершении проверяемой операции возвращаемое функцией IOResult значение равно нулю.
Используя функцию IOResult, нужно помнить о том, что она должна вызываться сразу вслед за проверяемой операцией. Если же Вы хотите провести анализ ошибки позже, Вам придется сохранить возвращаемое функцией значение в некоторой промежуточной переменной.
Просмотрите еще раз фрагмент программы, в которой посредством процедуры reset производится попытка открытия файла. Если эта попытка не увенчалась успехом, то на экран будет выведено сообщение об ошибке.
{$I-} {отключение контроля ввода/вывода}
|
В своих программах Вы должны применять функцию IOResult.
Замечание. Функция применима к операциям файлового ввода/вывода независимо от вида файла (типизированный, нетипизированный, текстовый).