Справочник по Ada 95
A.10.8 Ввод-вывод для целочисленных типов
Статическая семантика
Ниже приведены процедуры, определенные в обобщенных пакетах Integer_IO и Modular_IO, которые должны быть инстанцированы для соответствующего знакового целого или модульного типа соответственно (указанного как Num в спецификациях).
Значения выводятся как десятичные или основанные литералы без символов нижнего подчеркивания или экспоненты, и, для Integer_IO, с предшествующим знаком минус, если значение отрицательное. Формат (включая любые предшествующие пробелы и знак минус) может быть задан необязательным параметром ширины поля. Значения ширины полей в форматах вывода относятся к целочисленному подтипу Field. Значения оснований относятся к целочисленному подтипу Number_Base.
subtype Number_Base is Integer range 2 .. 16;
Значения по умолчанию для ширины поля и основания, используемые процедурами вывода, определены следующими переменными, объявленными в обобщенных пакетах Integer_IO и Modular_IO:
Default_Width : Field := Num'Width;
Default_Base : Number_Base := 10;
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 Get(Item : out Num; Width : in Field := 0);
Если значение параметра Width равно нулю, пропускаются любые предшествующие пробелы, разделители строк или страниц, затем считывается знак плюс, если он есть, или (только для знакового типа) знак минус, если он есть, затем считывается самая длинная возможная последовательность символов, соответствующая синтаксису числового литерала без точки. Если предоставлено ненулевое значение Width, то считываются ровно Width символов или символы (возможно, ни одного) до разделителя строк, что произойдет раньше; любые пропущенные начальные пробелы включаются в счет.
Возвращает в параметре Item значение типа Num, соответствующее введенной последовательности.
Исключение Data_Error передается, если последовательность считанных символов не является допустимым целочисленным литералом или если полученное значение не соответствует подтипу Num (для Integer_IO) или не находится в диапазоне оснований Num (для Modular_IO).
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 : 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);
Считывает целое значение из начала заданной строки, следуя тем же правилам, что и процедура Get для считывания целого значения из файла, но рассматривая конец строки как разделитель файла. Возвращает в параметре Item значение типа Num, соответствующее введенной последовательности. Возвращает в Last значение индекса, такое что From(Last) — последний считанный символ.
Исключение Data_Error передается, если введенная последовательность не имеет требуемого синтаксиса или если полученное значение не соответствует подтипу Num.
procedure Put(To : out String;
Item : in Num;
Base : in Number_Base := Default_Base);
Item : in Num;
Base : in Number_Base := Default_Base);
Выводит значение параметра Item в заданную строку, следуя тем же правилам, что и при выводе в файл, используя длину заданной строки как значение для Width.
Integer_Text_IO — это пакет библиотеки, являющийся необобщенным эквивалентом Text_IO.Integer_IO для предопределенного типа Integer:
with Ada.Text_IO;
package Ada.Integer_Text_IO is new Ada.Text_IO.Integer_IO(Integer);
package Ada.Integer_Text_IO is new Ada.Text_IO.Integer_IO(Integer);
Для каждого предопределенного знакового целочисленного типа предоставляется необобщенный эквивалент Text_IO.Integer_IO с именами, такими как Ada.Long_Integer_Text_IO.
Реализационные разрешения
Необобщенные пакеты могут, но не обязаны, быть фактическими инстанцированиями обобщенного пакета для соответствующего предопределенного типа.
ПРИМЕЧАНИЯ
29 Для Modular_IO выполнение Get передает Data_Error, если последовательность считанных символов образует целочисленный литерал, выходящий за пределы диапазона 0..Num'Last.
Примеры
Этот абзац был удален.
package Int_IO is new Integer_IO(Small_Int); use Int_IO;
-- формат по умолчанию используется при инстанцировании,
-- Default_Width = 4, Default_Base = 10
-- формат по умолчанию используется при инстанцировании,
-- Default_Width = 4, Default_Base = 10
Put(126); -- "b126"
Put(-126, 7); -- "bbb-126"
Put(126, Width => 13, Base => 2); -- "bbb2#1111110#"
Put(-126, 7); -- "bbb-126"
Put(126, Width => 13, Base => 2); -- "bbb2#1111110#"