Значения выводятся в виде десятичных литералов или литералов с ос­нованием, без подчеркиваний и порядка, с предшествующим знаком ми­нус для отрицательных чисел. Формат, определяющий ширину поля (вклю­чая ведущие пробелы и знак минус), может быть задан необязательным па­раметром 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 #”

  1. В в о д - в ы в о д для вещественных типов

Следующие процедуры определены в настраиваемых пакетах 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.

  1. В в о д - в ы в о д для перечислимых типов

Описанные ниже процедуры определены в настраиваемом пакете 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;