Справочное руководство Ada 2005
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#"