Введение в программирование - Учебное пособие (Корочкин А. В.)

15.5 исключения при вводе-выводе

При выполнении операций ввода-вывода могут быть возбуждены предопределённые исключения. Они описаны в пакете lOJExceptions. Спецификация пакета lOJExceptions:

package   lOJExceptions   is

exception; exception; exception; exception; exception; exception; exception; exception;

STATUSJERROR                :

MODEJERROR

NAMEJERROR

USEJERROR

DEVICEJERROR

ENDJERROR

DATAJERROR

LAYOUT ERROR

end

lOJExceptions ;

Исключение Status Error возбуждается при попытке выполнить действие над еще не открытым файлом или при попытке открыть уже открытый файл.

Исключение Mode_Error возбуждется при попытке чтения или проверки конца файла вида Out_File , а также при чтении записи в файл вида In_File.

procedure   Put(

File

Item

Width

in             File_Type;

in             Enum;

in             Field        : = Default Width;

25  — Корочкин А,  В.

 

194

Ада 95. Введение в программирование

195

Глава 15. Ввод-вывод

 

Исключение Name_Error возбуждается при попытке вызова проце­дур Create и Open , если строка, заданная параметром Name , не позволяет идентифицировать внешний файл.

Исключение Use_Error возбуждается при попытке выполнить опе­рацию, не разрешенную по причинам, зависящими от характеристик внешнего файла.

Исключение Device_Error возбуждается при невозможности за­вершения операции вво-вывода из-за неисправности устройств.

Исключение End_Error возбуждается при попытке пропустить признак конца файла.

Исключение Data_Error возбуждается в процедурах Read ,если вводимая последовательность не соответствует требуемому типу, а в процедурах Get - не соответствует синтаксису или не принадлежит диапазону типа.

Исключение        Layout_Error возбуждается в текстовом вводу- выводе при вызове функций Col, Line, Page , если возвращаемое зна­ чение превышает Count'Last; в процедуре Put - при попытке вывести большое количество символов в строку.

Ш  СОВЕТЫ:

*  Всегда закрывайте все открытые файлы после окончания их ис­пользования.

*  Используйте константы и переменные в качестве формальных па­раметров Name и Form в предопределенных пакетах ввода-вывода.

*  Избегайте ввод-вывода ссылочных типов.

*  Используйте пакеты SequentialJO и DirectJO вместо StrearrMO при организации гетерогенного ввода-вывода низко­го уровня.

With  Ada.DirectJO ; procedure    EXC15_1   is

type   Post   is record

X   : string ( 1 .. 64 ); end   record ;

- -  Конкретизация пакета package    WorkJO  is   new

Ada.DirectJO ( Element_Type = > Post);

use   WorkJO;

ZZ     : File_Type ;--используется тип из предопределенного

- - пакета

Ident: string (1 .. 12) : =  "File_15_3"; - - идентификатор

- - файла

begin

Create ( File = > ZZ;    Mode = > lnout_File ;

Name = > Ident;   Form = >"");

Close (ZZ); end    EXC15 1;

25»