получается формат по умолчанию: DEFAULTEXP
Примечание
package REAL_IO is new FLOAT_IO(REAL); use REAL_IO; -- в "результате конкретизации -- получается формат по умолчанию: DEFAULTEXP = 3 X : REAL :=-123.4567; -— 8 цифр (СМ. 7)PUT(X); --формат по умолчанию "-1.2345670Е+02" PUT(X, FORE => 5, AFT => 3, ЕХР => 2); -- "ЬЬЬ-1.235Е+2" PUT(X, 5, 3, 0); -- "Ь-123.457" Примечание. Если положительное число, выводимое процедурой PUT в строку, заполняет строку целиком, без использования ведущих пробелов, то при выводе такого же отрицательного числа будет возбуждено исключение LAYOUT_ERROR.
Ссылки: атрибут AFT 10, атрибут FORE 10, вещественный литерал 2.4, десятичный литерал 1, признак конца строчки 5, исключение DATA_ERROR 14.4, исключение LAYOUT_ERROR 14.4, литерал с основанием 2, пакет FIXED_IO 10, пакет FLOAT_IO 10, параметр WIDTH 5, подтип FIELD 5, пропуск 5, просмотреть 5, процедура GET 5, процедура PUT 5, тип FILE_TYPE
9. ВВОД-ВЫВОД ДЛЯ ПЕРЕЧИСЛИМЫХ ТИПОВ
Описанные ниже процедуры определены в настраиваемом пакете ENUMERATION_IO, который должен быть конкретизован с соответствующим перечислимым типом (указанным в спецификации параметром настройки ENUM).
При выводе значений для представления идентификаторов используются либо строчные, либо прописные буквы. Это задается параметром SET, который принадлежит перечислимому типу TYPE-SET:
type TYPE_SET is (LOWER_CASE, UPPER_CASE); Формат (в который включаются и заключительные пробелы) может быть задан необязательным параметром ширины поля. Ширина поля по умолчанию и представление букв задаются описанными в настраиваемом пакете ENUMERATION_IO переменными:
DEFAULT_WIDTH : FIELD := 0; DEFAULT_SETTING : TYPE_SET := UPPER_CASE; Определены следующие процедуры:
procedure GET(FILE : in FILE_TYPE; ITEM : out ENUM); procedure GET(ITEM : out ENUM); После игнорирования предшествующих пропусков, признака конца строчки и признака конца страницы читают или идентификатор (строчные и прописные буквы считаются эквивалентными), или символьный литерал (включая апострофы); чтение производится в соответствии с синтаксисом соответствующих лексем. Через параметр ITEM возвращают значение, соответствующее введенной последовательности.
Если введенная последовательность не удовлетворяет правилам синтаксиса или если идентификатор или символьный литерал не соответствуют никакому значению подтипа ENUM, то возбуждается исключение DATA_ERROR.
procedure PUT(FILE : in FILE_TYPE; ITEM : in ENUM; WIDTH : in FIELD := DEFAULT_WIDTH; SET : in TYPE_SET := DEFAULT_SETTING);procedure PUT(ITEM :in ENUM; WIDTH : in FIELD := DEFAULT_WIDTH; SET : in TYPE_SET := DEFAULT_SETTING); Выводят значение параметра ITEM как литерал перечисления (либо идентификатор, либо символьный литерал). Необязательный параметр SET указывает, какие буквы — строчные или прописные — следует использовать для представления идентификаторов (для символьных литералов он игнорируется). Если число выводимых символов меньше значения параметра WIDTH, то после них выводятся пробелы, дополняющие число символов до WIDTH.
procedure GET(FROM : in STRING; ITEM : out ENUM; LAST : out POSITIVE); Читает с начала строки, заданной параметром FROM, значение перечислимого типа по тем же правилам, что и процедура GET, читающая значение перечислимого типа из файла;при этом конец строки рассматривается как признак конца файла. Через параметр ITEM возвращает значение типа ENUM, соответствующее введенной последовательности. Через параметр LAST возвращает значение индекса, соответствующее последнему читаемому символу (следовательно, этот символ имеет значение индексируемой компоненты FROM (LAST)).
Если введенная последовательность не соответствует правилам синтаксиса или если идентификатор или символьный литерал не соответствуют никакому значению подтипа ENUM, то возбуждает исключение DATA_ERROR.
procedure PUT(TO : out STRING; ITEM : in ENUM; SET : in TYPE_SET := DEFAULT_SETTING); Выводит в строку, заданную параметром ТО, значение параметра ITEM по тем же правилам, что и при выводе в файл; в качестве значения параметра WIDTH используется длина указанной строки.
Хотя спецификация пакета ENUMERATION_IO допускает конкретизацию с соответствующим целым типом, это не является целью данного пакета; язык не определяет результата такой конкретизации.
Примечание. Процедуры PUT для символов и для перечислимых значений имеют определенные различия:
TEXT_IO.PUT('A'); -— выводит символ Аpackage CHAR_IO is new TEXT_IO.ENUMERATION_IO(CHARACTER); CHAR_IO.PUT('A'); -— выводит символ 'А', заключенный в одинарные кавычки Тип BOOLEAN является перечислимым типом, поэтому пакет ENUMERATION_IO может быть настроен на этот тип.
Ссылки: исключение DATA_ERROR 14.4, пакет ENUMERATION_IO 10, параметр WIDTH 5, подтип FIELD 5, признак конца строчки 5, пропуск 5, просмотреть 5, процедура GET 5, процедура PUT 5, тип FILE_TYPE
10. СПЕЦИФИКАЦИЯ ПАКЕТА ВВОДА-ВЫВОДА ТЕКСТА
with IO_EXCEPTIONS; package TEXT_IO is type FILE_TYPE is limited private; type FILE_MODE is (IN_FILE, OUT_FILE); type COUNT is range 0 .. определяется_реапизацией; subtype POSITIVE_COUNT is COUNT range 1 .. COUNT'LAST; UNBOUNDED : constant COUNT := 0; -- длина строчки и страницы subtype FIELD is INTEGER range 0 .. определяется_реапизацией; subtype NUMBER_BASE is INTEGER range 2 .. 16; type TYPE_SET is (LOWER_CASE, UPPER_CASE); -- управление файлами procedure CREATE (FILE : in out FILE_TYPE; MODE : in FILE_MODE := OUT_FILE; NAME : in STRING := ""; FORM : in STRING := ""); procedure OPEN (FILE : in out FILE_TYPE; MODE : in FILE_MODE; NAME : in STRING; FORM : in STRING := ""); procedure CLOSE (FILE : in out FILE_TYPE); procedure DELETE (FILE : in out FILE_TYPE); procedure RESET (FILE : in out FILE_TYPE; MODE : in FILE_MODE); procedure RESET (FILE : in out FILE_TYPE); function MODE (FILE : in FILE_TYPE) return FILE_MODE; function NAME (FILE : in FILE_TYPE) return STRING; function FORM (FILE : in FILE_TYPE) return STRING; function IS_OPEN(FILE : in FILE_TYPE) return BOOLEAN; -- управление файлами ввода и вывода по умолчанию procedure SET_INPUT (FILE : in FILE_TYPE); procedure SET_OUTPUT(FILE : in FILE_TYPE); function STANDARD_INPUT return FILE_TYPE; function STANDARD_OUTPUT return FILE_TYPE; function CURRENT_INPUT return FILE_TYPE; function CURRENT_OUTPUT return FILE_TYPE; -- спецификация длин строчки и страницы procedure SET_LINE_LENGTH(FILE : in FILE_TYPE; TO : in COUNT); procedure SET_LINE_LENGTH(TO : in COUNT); procedure SET_PAGE_LENGTH(FILE : in FILE_TYPE; TO : in COUNT); procedure SET_PAGE_LENGTH(TO : in COUNT); function LINE_LENGTH(FILE : in FILE_TYPE) return COUNT; function LINE_LENGTH return COUNT; function PAGE_LENGTH(FILE : in FILE_TYPE) return COUNT; function PAGE_LENGTH return COUNT; -- управление колонкой, строчкой и страницей procedure NEW_LINE (FILE : in FILE_TYPE; SPACING : in POSITIVE_COUNT := 1); procedure NEW_LINE (SPACING : in POSITIVE_COUNT := 1); procedure SKIP_LINE (FILE : in FILE_TYPE; SPACING : in POSITIVE_COUNT := 1); procedure SKIP_LINE (SPACING : in POSITIVE_COUNT := 1); function END_OF_LINE(FILE : in FILE_TYPE) return BOOLEAN; function END_OF_LINE return BOOLEAN; procedure NEW_PAGE (FILE : in FILE_TYPE); procedure NEW_PAGE; procedure SKIP_PAGE (FILE : in FILE_TYPE); procedure SKIP_PAGE; function END_OF_PAGE(FILE : in FILE_TYPE) return BOOLEAN; function END_OF_PAGE return BOOLEAN; function END_OF_FILE(FILE : in FILE_TYPE) return BOOLEAN; function END_OF_FILE return BOOLEAN; procedure SET_COL (FILE : in FILE_TYPE; TO : in POSITIVE_COUNT); procedure SET_COL (TO : in POSITIVE_COUNT); procedure SET_LINE(FILE : in FILE_TYPE; TO : in POSITIVE_COUNT); procedure SET_LINE(TO : in POSITIVE_COUNT); function COL (FILE : in FILE_TYPE) return POSITIVE_COUNT; function COL return POSITIVE_COUNT; function LINE(FILE : in FILE_TYPE) return POSITIVE_COUNT; function LINE return POSITIVE_COUNT; function PAGE(FILE : in FILE_TYPE) return POSITIVE_COUNT; function PAGE return POSITIVE_COUNT; -- символьный ввод-вывод procedure GET(FILE : in FILE_TYPE; ITEM : out CHARACTER); procedure GET(ITEM : out CHARACTER); procedure PUT(FILE : in FILE_TYPE; ITEM : in CHARACTER); procedure PUT(ITEM : in CHARACTER); -- строковый ввод-вывод procedure GET(FILE : in FILE_TYPE; ITEM : out STRING); procedure GET(ITEM : out STRING); procedure PUT(FILE : in FILE_TYPE; ITEM : in STRING); procedure PUT(ITEM : in STRING); procedure GET_LINE(FILE : in FILE_TYPE; ITEM : out STRING; LAST : out NATURAL); procedure GET_LINE(ITEM : out STRING; LAST : out NATURAL); procedure PUT_LINE(FILE : in FILE_TYPE; ITEM : in STRING); procedure PUT_LINE(ITEM : in STRING); -- настраиваемый пакет для ввода-вывода целых типов generic type NUM is range <>; package INTEGER_IO is DEFAULT_WIDTH : FIELD := NUM'WIDTH; DEFAULT_BASE : NUMBER_BASE := 10; procedure GET(FILE : in FILE_TYPE; ITEM : out NUM; WIDTH : in FIELD := 0); procedure GET(ITEM : out NUM; WIDTH : in FIELD := 0); procedure PUT(FILE : in FILE_TYPE; ITEM : in NUM; WIDTH : in FIELD := DEFAULT_WIDTH; BASE : in NUMBER_BASE := DEFAULT_BASE); procedure PUT(ITEM : in NUM; WIDTH : in FIELD := DEFAULT_WIDTH; BASE : in NUMBER_BASE := DEFAULT_BASE); procedure GET(FROM : in STRING; ITEM : out NUM; LAST : out POSITIVE); procedure PUT(TO : out STRING; ITEM : in NUM; BASE : in NUMBER_BASE := DEFAULT_BASE); end INTEGER_IO; -- настраиваемый пакет для ввода-вывода вещественных типов generic type NUM is digits <>; package FLOAT_IO is DEFAULT_FORE : FIELD := 2; DEFAULT_AFT : FIELD := NUM'DIGITS-1; DEFAULT_EXP : FIELD := 3; procedure GET(FILE : in FILE_TYPE; ITEM : out NUM; WIDTH : in FIELD := 0); procedure GET(ITEM : out NUM; WIDTH : in FIELD := 0); procedure PUT(FILE : in FILE_TYPE; ITEM : in NUM; FORE : in FIELD := DEFAULT_FORE; AFT : in FIELD := DEFAULT_AFT; EXP : in FIELD := DEFAULT_EXP); procedure PUT(ITEM : in NUM; FORE : in FIELD := DEFAULT_FORE; AFT : in FIELD := DEFAULT_AFT; EXP : in FIELD := DEFAULT_EXP); procedure GET(FROM : in STRING; ITEM : out NUM; LAST : out POSITIVE); procedure PUT(TO : out STRING; ITEM : in NUM; AFT : in FIELD := DEFAULT_AFT; EXP : in FIELD := DEFAULT_EXP); end FLOAT_IO; generic type NUM is delta <>; package FIXED_IO is DEFAULT_FORE : FIELD := NUM'FORE; DEFAULT_AFT : FIELD := NUM'AFT; DEFAULT_EXP : FIELD := 0; procedure GET(FILE : in FILE_TYPE; ITEM : out NUM; WIDTH : in FIELD := 0); procedure GET(ITEM : out NUM; WIDTH : in FIELD := 0); procedure PUT(FILE : in FILE_TYPE; ITEM : in NUM; FORE : in FIELD := DEFAULT_FORE; AFT : in FIELD := DEFAULT_AFT; EXP : in FIELD := DEFAULT_EXP); procedure PUT(ITEM : in NUM; FORE : in FIELD := DEFAULT_FORE; AFT : in FIELD := DEFAULT_AFT; EXP : in FIELD := DEFAULT_EXP); procedure GET(FROM : in STRING; ITEM : out NUM; LAST : out POSITIVE); procedure PUT(TO : out STRING; ITEM : in NUM; AFT : in FIELD := DEFAULT_AFT; EXP : in FIELD := DEFAULT_EXP); end FIXED_IO; -- настраиваемый пакет для ввода-вывода перечислимых типов generic type ENUM is (<>); package ENUMERATION_IO is DEFAULT_WIDTH : FIELD := 0; DEFAULT_SETTING : TYPE_SET := UPPER_CASE; procedure GET(FILE : in FILE_TYPE; ITEM : out ENUM); procedure GET(ITEM : out ENUM); procedure PUT(FILE : in FILE_TYPE; ITEM : in ENUM; WIDTH : in FIELD := DEFAULT_WIDTH; SET : in TYPE_SET := DEFAULT_SETTING); procedure PUT(ITEM : in ENUM; WIDTH : in FIELD := DEFAULT_WIDTH; SET : in TYPE_SET := DEFAULT_SETTING); procedure GET(FROM : in STRING; ITEM : out ENUM; LAST : out POSITIVE); procedure PUT(TO : out STRING; ITEM : in ENUM; SET : in TYPE_SET := DEFAULT_SETTING); end ENUMERATION_IO; -- исключения STATUS_ERROR : exception renames IO_EXCEPTIONS.STATUS_ERROR; MODE_ERROR : exception renames IO_EXCEPTIONS.MODE_ERROR; NAME_ERROR : exception renames IO_EXCEPTIONS.NAME_ERROR; USE_ERROR : exception renames IO_EXCEPTIONS.USE_ERROR; DEVICE_ERROR : exception renames IO_EXCEPTIONS.DEVICE_ERROR; END_ERROR : exception renames IO_EXCEPTIONS.END_ERROR; DATA_ERROR : exception renames IO_EXCEPTIONS.DATA_ERROR; LAYOUT_ERROR : exception renames IO_EXCEPTIONS.LAYOUT_ERROR; private -- определяется реализацией end TEXT_IO;
Содержание раздела