Значения выводятся в виде десятичных литералов или литералов с основанием, без подчеркиваний и порядка, с предшествующим знаком минус для отрицательных чисел. Формат, определяющий ширину поля (включая ведущие пробелы и знак минус), может быть задан необязательным параметром WIDTH. Его значение принадлежит неотрицательному целому подтипу FIELD. Значения основания принадлежат целому подтипу NUMBER-BASE.
subtype NUMBER_BASE is INTEGER range 2. .16;
В процедурах вывода могут использоваться ширина поля и основание по умолчанию; они задаются переменными, описанными в настраиваемом пакете INTEGER-IO:
DEFAULT_WIDTH: FIELD: = NUM'WIDTH:
DEFAULT_BASE: NUMBER-BASE: = 10;
Определены следующие процедуры:
procedure GET (FILE: in F1LE_TYPE; ITEM; out NUM; WlDTH;in FIELD: = 0);
procedure GET (ITEM: out NUM; WIDTH; in FIELD: = 0);
При нулевом значении параметра WIDTH пропускают все ведущие пропуски, признаки конца строчки и страницы, читают знак плюс или минус (если он есть), затем производят чтение в соответствии с синтаксисом целого литерала (он может быть литералом с основанием). При ненулевом значении WIDTH вводят ровно WIDTH символов или, если раньше встретится признак конца строки, то вводят лишь символы до этого признака конца (возможно, ни одного); в это количество включаются и все ведущие пропуски.
В параметр ITEM типа NUM возвращают значение, соответствующее введенной последовательности.
Если введенная последовательность не соответствует правилам синтаксиса или если полученное значение не принадлежит подтипу NUM, то возбуждается исключение DATA-ERROR.
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);
Значение параметра ITEM выводят в виде целого литерала без подчеркиваний, порядка и ведущих нулей (если значение равно нулю, выводят один нуль), с предшествующим знаком минус, если значение отрицательное.
Если число символов выводимой последовательности меньше значения WIDTH, то она дополняется ведущими пробелами.
Если параметр BASE (заданный явно указанным значением или переменной DEFAULT-BASE) имеет значение десять, то числа выводятся по синтаксису десятичного литерала; в противном случае — по синтаксису литерала с основанием с использованием прописных букв.
procedure GET (FROM: in STRING; ITEM: out NUM; LAST: out POSITIVE);
Читает с начала строки, заданной параметром FROM, целое значение по тем же правилам, что и процедура GET, которая читает целое значение из файла; при этом конец строки рассматривается как признак конца файла. Через параметр ITEM возвращает значение типа NUM, соответствующее введенной последовательности. Через параметр LAST возвращает значение индекса такое, что FROM (LAST) является последним читаемым символом.
Если введенная последовательность не соответствует правилам синтаксиса или если полученное значение не принадлежит подтипу NUM, то возбуждается исключение DATA_ERROR.
procedure PUT (ТО: out STRING; ITEM: in NUM;
BASE: in NUMBER_BASE: = DEFAULT-BASE);
Через параметр TO выводит значение параметра ITEM по тем же правилам, что и при выводе в файл; в качестве значения параметра WIDTH используется длина указанной строки.
Примеры:
package ЦЕЛ_ВВ is new INTEGER_IO (КОРОТКОЕ_ЦЕЛ) ;
use ЦЕЛ_ВВ;
- в результате настройки получается формат по умолчанию:
- DEFAULT-WIDTH = 4,DEFAULT-BASE = 10
PUT (126) --”Ы26”
PUT (-126,7) --”bbb-126”
PUT (126, WIDTH => 13, BASE => 2); --”bbb2 #1111110 #”
В в о д - в ы в о д для вещественных типов
Следующие процедуры определены в настраиваемых пакетах FLOAT-10 и FIXED_Ю, которые должны быть конкретизированы с соответствующими плавающим или фиксированным типом (указанным в спецификации параметром NUM).
Значения выводятся как десятичные литералы без подчеркиваний. Формат каждого выводимого значения состоит из поля FORE, десятичной точки, поля AFT, а также (при ненулевом значении параметра ЕХР) буквы Е и поля ЕХР. Таким образом, возможны два формата:
FORE. AFT и FORE. AFT Е ЕХР
без всяких пробелов между этими полями. Поле FORE может включать предшествующие пробелы и знак минус для отрицательных значений. Поле AFT состоит из одних лишь десятичных цифр (оно может оканчиваться нулями) . Поле ЕХР состоит из знака (плюс или минус) и порядка (возможно, с предшествующими нулями).
Для плавающих типов длины этих полей по умолчанию определены описанными в пакете FLOAT_IO переменными:
DEFAULT_FORE: FIELD: = 2;
DEFAULT_AFT: FIELD: = NUM'DIGITS -1;
DEFAULT_EXP: FIELD: = 3;
Для фиксированных типов длины по умолчанию для этих полей задаются переменными, описанными в пакете FIXED-IO:
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);
При нулевом значении параметра WIDTH опускают все ведущие пропуски, признак конца строчки или признак конца страницы, читают знак плюс или минус (если он есть); затем производят чтение в соответствии с синтаксисом вещественного литерала (он может быть литералом с основанием) . При ненулевом значении параметра WIDTH вводят или ровно WIDTH символов или, если раньше встретился признак конца строчки, то вводят лишь символы, читаемые до этого признака конца (возможно, ни одного); в это количество включаются и все предшествующие пропуски.
Через параметр ITEM возвращают значение типа NUM, соответствующее введенной последовательности.
Если введенная последовательность не удовлетворяет требованиям синтаксиса или если полученное значение не принадлежит подтипу NUM, то возбуждается исключение DATA_ERROR.
procedure PUT (FILE: in FILE_TYPE; ITEM: in NUM;
FORE: in FIELD: = DEFAULTFORE;
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);
Выводят значение параметра ITEM в виде десятичного литерала в формате, определяемом параметрами FORE, AFT и EXP. Если значение ITEM отрицательное, то в целую часть включен знак минус. При нулевом значении параметра ЕХР целая часть представляется таким количеством цифр, которое требуется для представления целой части значения ITEM. При необходимости значение FORE; игнорируется. Если в значении ITEM нет целой части, то целая часть представляется цифрой 0.
Если значение ЕХР больше нуля, то целая часть представляется одной цифрой, отличной от нуля, кроме значения ITEM, равного 0.0.
В обоих случаях, если целая часть, включая знак минус, содержит менее FORE символов, она дополняется до этого количества предшествующими нулями. Дробная часть состоит из AFT цифр или, при AFT равном нулю, из одной цифры. Значение округляется; остаток, равный половине последнего разряда, может быть округлен как с избытком, так и с недостатком.
При нулевом значении ЕХР число выводится без порядка. Если ЕХР больше нуля, то при выводе порядка выводится столько цифр, сколько необходимо для представления порядка значения ITEM (для представления целой части этого значения используется один символ); первым символом является знак (плюс или минус). Если для представления порядка, включая знак, используется менее ЕХР символов, то это представление дополняется до требуемого количества символов предшествующими нулями. Для значения ITEM, равного 0.0, порядок равен нулю.
procedure GET (FROM: in STRING; ITEM: out NUM ; LAST: out POSITIVE);
Читает с начала строки, заданной параметром FROM, вещественное значение по тем же правилам, что и процедура GET, читающая вещественное значение из файла; при этом конец строки рассматривается как признак конца файла. Через параметр ITEM возвращает значение типа NUM, соответствующее введенной последовательности. Через параметр LAST возвращает значение индекса такое, что FROM (LAST) является последним читаемым символом.
Если введенная последовательность не соответствует правилам синтаксиса или если полученное' значение не принадлежит подтипу NUM, то возбуждается исключение DATA_ERROR.
procedure PUT (ТО: out STRING; ITEM: in NUM;
AFT: in FIELD: = DEFAULT.AFT;
EXP: in FIELD: = DEFAULT EXP);
Через параметр TO выводит значение параметра ITEM по тем же правилам, что и при выводе в файл; при этом в качестве FORE использует такое значение, чтобы общее число выводимых символов, включая предшествующие пробелы, соответствовало длине строки параметра ТО.
Примеры:
package ВЕЩЕСТВ-ВВ is new FLOAT.IO (ВЕЩЕСТВ);
use ВЕЩЕСТВ ВВ;
--в результате конкретизации получается формат по умолчанию; DEFAULT_EXP=3
X: ВЕЩЕСТВ: =-123.4567 --digits 8 (см. 3.5.7)
PUT(X) -- формат по умолчанию ’’-1.2345670Е+02”
PUT(X, FORE => 5, AFT => 3, EXP => 2); - - ”bbb-1.235E+2”
PUT(X, 5, 3, 0); - - ”b-123.457”
Примечание. Если положительное число, выводимое процедурой PUT в строку, заполняет строку целиком, без использования ведущих пробелов, то при выводе такого же отрицательного числа будет возбуждено исключение LAYOUT.ERROR.
В в о д - в ы в о д для перечислимых типов
Описанные ниже процедуры определены в настраиваемом пакете ENUMERATION—10, который должен быть конкретизирован с соответствующим перечислимым типом (указанным в спецификации параметром настройки 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 (ТО: out STRING;
ITEM: in ENUM;
SET: in TYPE_SET: = DEFAULT-SETTING);
Выводит в строку, заданную параметром ТО, значение параметра ITEM по тем же правилам, что и при выводе в файл; в качестве значения параметра WIDTH используется длина указанной строки.
Хотя спецификация пакета ENUMERATION—IO допускает конкретизацию с соответствующим целым типом, это не является целью данного пакета; язык не определяет результата такой конкретизации.
Примечание. Процедуры PUT для символов и перечислимых значений имеют определенные различия:
TEXT_IO.PUT('A'); - - выводит символ А
package СИМВ.ВВ is new TEXT_IO.ENUMERATION_IO (CHARACTER);
СИМВ_ВВ. PUT('a’) ; - - выводит символ 'А1,
- заключенный в одинарные
- кавычки
Тип BOOLEAN является перечислимым типом, поэтому пакет ENUMERATION_IO может быть настроен на этот тип.
14.3.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;
unction 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;