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

15. 4 пакет text_io

Пакет Text_IO используется для ввода-вывода текстовых файлов в форме, удобной для пользователя. Спецификация пакета приведена в Приложении 3.

Для использования ресурсов пакета в программном модуле пользо­вателя ему должен предшествовать спецификатор контекста:

with   Ada . TextJO;

Ввод-вывод значений соответствующих типов текстовых файлов осуществляется через процедуры Put и Get. Пакет TextJO со­ держит в свою очередь настраиваемые пакеты       IntegeMO,

Float_IO   и    Fixed_IO для ввода-вывода соответственно  целых, пла­вающих и фиксированных типов.

15.4.1 Ввод-вывод   целых   типов

Процедуры ввода-вывода для целых типов определены в настраивае­мом пакете IntegeMO, который находится в пакете Text_IO. Пакет IntegeMO имеет один параметр настройки:

type    NUM   is    range <>,

который задаётся через соответствующий целый тип при конкретиза­ции. Например:

new         IntegeMO ( shortjnteger);

new         IntegeMO ( positive );

new         IntegeMO ( integer);

package lo_lnt_Short          is

package Pos          is

package INPUT66               is

Значения целых типов выводятся в виде десятичных литералов или литералов по основанию без подчёркивания и порядка. Значение осно­вания принадлежит целому подтипу:

subtype    Number_Base   is   integer   range   2 .. 16;

При выводе в процедурах могут использоваться параметры ширины поля и основания, которые по умолчанию задаются в пакете IntegeMO переменными:

Default_Width Default Base

Field Number Base

Для ввода определены следующие процедуры: procedure   Get (

procedure    Get (

:=   Num'Width; :=   10;

File

 

in

 

FlileJType;

 

Item

 

out

 

Num;

 

Width

 

in

 

Field: = 0);

 

File

 

in

 

Field_Type;

 

Item

 

out

 

Num;

 

Width

 

in

 

Field : = 0 ) ;

 

ja определены следующие процедуры:

File

Item

Width

in             File_Type;

in             Num;

in             Field := Default_Width ;

procedure     Put (

190

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

191

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

 

 

Base       :     in   Number_Base : =

Default_Base); procedure     Put (   Item        :   in    Num;

Width      :    in    Field := DefaultJ/Vidth ; Base       :    in   Number_Base ; =

Default_Base);

Значение параметра Item выводится в виде целого литерала без под­чёркивания, порядка и ведущих нулей и со значением знака минус, если значение отрицательное. Если в выводимой последовательности число символов меньше значения параметра Width , она дополняется слева пробелами.

Если параметр Base равен десяти (по умолчанию он также равен десяти), то число выводится в соответствии с синтаксисом десятичного литерала, в противном случае - в соответствии с синтаксисом литерала по основанию.

П Пример:

package      IOJNT99    is   new  TextJO.IntegerJO (integer); use       IOJNT99;

по умолчанию при выводе используются параметры

--     Default_Width  =4

--     Default Base  =10

выводится     "ЬЫ21" выводится      "bb-121" 2 ); - - выводится

"bb2#1111001#"

X   :=   121 ;

put ( X );

put(-X,   6);

put(X,  Width  => 12,   Base

15.4.2 Ввод-вывод  вещественных типов

Процедуры ввода-вывода вещественных типов определены в на­страиваемых пакетах Float_IO и FixedJO, которые находятся в пакете Text_IO. Пакет Float_IO имеет параметр настройки:

type     NUM    is   digits <> ;

который задаётся через соответствующий тип с плавающей запятой при конкретизации.

Пакет   Fixed_IO   имеет параметр настройки: type   NUM  is   delta <>,

который задаётся через соответствующий тип с фиксированной запя­той при конкретизации. П Например:

20.0;

type    FLT    is   digits  8;      - - описания типов type   Data   is   delta    0.001   range     -15.0   .

package  FLTJO  is  new  FloatJO ( FLT );   - - конкретизация package   INPUT_DATA    is    new    FixedJO ( Data);

Вывод значений вещественных типов осуществляется как вывод деся­тичных литералов без подчёркивания. Формат вывода определяется полями Fore (целая часть), Aft (дробная часть), Ехр (порядок) с добав­лением десятичной точки и буквы Е в случае необходимости:

Fore. Aft

Е  Ехр

Fore . Aft

Значения этих полей по умолчанию задаются в спецификациях соот­ветствующих пакетов.

Get:

procedure

 

Get(

 

File          :    in

 

File_Type;

 

 

 

 

 

Item        :   out

 

Num ;

 

 

 

 

 

Width      :    in

 

Field : =0);

 

procedure

 

Get(

 

Item         :    out

 

Num;

 

 

 

 

 

Width      :    in

 

Field : = 0 ) ;

 

Для вывода вещественных типов определены процедуры Put:

 

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_AFft;

 

 

 

 

 

Exp

 

in

 

Field

 

=   Default_Exp )

 

193

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

192

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

 

 

Значения параметра Item выводится в виде десятичного литерала в формате, определяемом параметрами Fore , Aft , Exp .

Если целая часть с учётом знака минус содержит менее Fore симво­лов, то в начале выводятся пробелы.

D Пример:

package    ZZE    is    new   Float IO ( real);   - - конкретизация

use   ZZE;

put(X); put(X, 5,3, Ob-put (X,    FORE

AFT =>   3, EXP

X:=   -121.4287;

- - выводится       "b 1.214287E+02"

--выводится         "b-121.428"

5,

2);        --выводится            "bbbl.214E+2"

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

Процедуры ввода-вывода для перечисляемых типов определены в настраиваемом пакете EnumerationJO, который при конкретизации настраивается на перечисляемый тип ( Enum).

D Например :

type  Color      is    ( blue, green,   gray); package      COLJN    is   new     EnumerationJO ( Color);

При выводе значений используются либо строчные, либо прописные буквы. Формат вывода (вместе с заключительными пробелами) задаёт­ся необязательными параметрами ширины поля. По умолчанию эти параметры:

Default_Width     :    Field :=   0;

Default_Setting    :    Type_Setting   :=    Upper_Case;

Для ввода перечисляемых типов определены процедуры Get:

procedure   Get( File   :   in      File_Type;       Item   :   out   Enum); procedure . Get ( Item :   out  Enum);

Для вывода перечисляемых типов определены процедуры Put:

Set          : in Type_Set : = Default_Setting );

procedure    Put (           Item              : in Enum ;

Width     : in Field      : =   Default_Widrth ;

Set          : in Type_Set: = Default_Setting );

Значение параметра Item выводится как литерал перечисления (либо идентификатор, либо символьный литерал). Если число выводимых символов меньше, чем значение параметра Width , то в конце выводятся пробелы, дополняющие число символов до Width .

Так как тип Boolean является перечисляемым типом, то настраи­ваемый пакет EnumerationJO может быть использован после конкре­тизации для ввода-вывода элементов типа Boolean.