Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_раб_5_7.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
349.7 Кб
Скачать

7.5.5. Обработка ошибок ввода-вывода

В программе на языке Turbo Pascal установлены следующие правила обработки ошибочных ситуаций, связанных с вводом-выводом. По умолчанию при выполнении любой такой операции автоматически производится проверка на возникновение ошибки. При обнаружении ошибки выполнение программы прекращается, а на экран дисплея выводится краткое диагностическое сообщение, содержащее условный номер ошибки.

Имеется возможность предусмотреть собственную реакцию на ошибочные ситуации в самой программе. Для этого необходимо в начале «опасного» фрагмента программы отключить автоматическую проверку на возникновение ошибки. Это делается внесением директивы компилятора {$1-}. В этом случае возникновение ошибки при выполнении программы не будет приводить к немедленному ее завершению; вместо этого код ошибки (отличный от нуля) будет сохранен системой. Посредством стандартной функции IoResult без параметров можно получить этот код и построить дальнейшие действия в зависимости от его значения, например, вывести краткое сообщение об ошибке (без указания причины ошибки):

..........

Assign (F, ‘c:\myfile’ );

{$I-} { отключение автоматического контроля }

Reset (F);

($I+) { включение автоматического контроля }

if loResult <> 0 then { возникла ошибка! }

begin

Writeln(‘Ошибка при открытии файла для чтения’);

Writeln(‘Работа будет закончена.’);

Writeln;

Writeln(‘Нажмите Enter ...’);

Readln;

Exit {Выход из процедуры}

end;

При использовании функции IoResult нужно знать, что если отключен режим автоматического контроля ({$I-}), то после возникновения ошибки все последующие операции с любым файлом будут игнорироваться, пока не произойдет обращение к функции IoResult. Поэтому необходимо выполнить вызов функции и анализ кода ошибки сразу после выполнения операции, связанной с файлом.

При необходимости можно провести более детальный (расширенный) анализ кода ошибки, например:

Assign (F, ‘ с: \myfile ‘ );

{$1-} { отключаем автоматический контроль }

Reset (F);

Code :=IoResult; { получили код результата }

if Code <> 0 then

begin { возникла ошибка! }

Write(‘ Ошибка при открытии файла: ‘);

саsе Code of

1 : Writeln (‘Файл не найден’);

3 : Writeln (‘Маршрут не найден’);

4 : Writeln (‘Слишком много открытых файлов’);

5 : Writeln (‘Доступ к файлу запрещен’);

12 : Writeln (‘Некорректный код доступа к файлам’)

else

Writeln(‘Неизвестный код ошибки’);

end

end;

{$I+) ( включаем автоматический контроль }

................

7.5.6. Текстовые файлы

Содержимое текстового файла рассматривается как последовательность символьных строк переменной длины, разделенных специальной комбинацией кодов, «конец строки» (13 или 0Dh), «перевод строки» (10 или 0Ah). Текстовый файл завершается специальным кодом «конец файла» (26 или 1Ah).

Представителем текстового файла в Pascal-программе является переменная файлового типа, которая должна быть описана с указанием стандартного типа text; например,

var MyText : text;

Для текстовых файлов применимы вышеопределенные начальные и завершающие операции (Assign, Reset, Rewrite, Flush, Close).

Текстовый файл может быть открыт для дополнения с помощью процедуры Append (F); эта процедура открывает файл для записи, но не очищает его, а устанавливает текущий указатель файла за последней записью.

Для записи в текстовый файл и чтения из него используются процедуры ReadLn и WriteLn. Эти процедуры осуществляют те же действия, что и соответствующие процедуры Read и Write, но после операций чтения и записи производят переход к следующей строке текстового файла.

Для контроля за окончанием текстового файла можно использовать функцию EOF.

Функция SeekEoLn(F) производит поиск конца текущей строки. Она пропускает все символы-разделители значений в строке (пробелы и табуляции) и устанавливает текущий указатель файла либо на конце строки (и тогда возвращает true), либо на первом значащем символе.

Функция SeekEoF(F) осуществляет поиск конца файла и действует аналогично функции SeekEoLn, но кроме символов-разделителей она пропускает символы концов строк (то есть переходит со строки на строку) в поисках кода конца файла. Если код 1Ah найден, то функция возвращает true, в противном случае – false.