Spec-Zone.ru › Ada 2012
Справочник Ada 2012

F.3.3 Пакет Text_IO.Editing

Пакет Text_IO.Editing предоставляет частный тип Picture с соответствующими операциями и обобщённый пакет Decimal_Output. Объект типа Picture состоит из правильно сформированной строки Picture (см. F.3.1) и логического значения, указывающего, будет ли строка отформатированного результата содержать только пробелы, если численное значение равно нулю. Пакет Decimal_Output содержит подпрограммы вывода, реализующие эффекты, определённые в F.3.2.

Статическая семантика

Библиотечный пакет Text_IO.Editing имеет следующее объявление:
package Ada.Text_IO.Editing is
type Picture is private;
function Valid (Pic_String : in String;
Blank_When_Zero : in Boolean := False) return Boolean;
function To_Picture (Pic_String : in String;
Blank_When_Zero : in Boolean := False)
return Picture;
function Pic_String (Pic : in Picture) return String;
function Blank_When_Zero (Pic : in Picture) return Boolean;
Max_Picture_Length : constant := определяется реализацией;
Picture_Error : exception;
Default_Currency : constant String := "$";
Default_Fill : constant Character := '*';
Default_Separator : constant Character := ',';
Default_Radix_Mark : constant Character := '.';
generic
type Num is delta <> digits <>;
Default_Currency : in String := Text_IO.Editing.Default_Currency;
Default_Fill : in Character := Text_IO.Editing.Default_Fill;
Default_Separator : in Character :=
Text_IO.Editing.Default_Separator;
Default_Radix_Mark : in Character :=
Text_IO.Editing.Default_Radix_Mark;
package Decimal_Output is
function Length (Pic : in Picture;
Currency : in String := Default_Currency)
return Natural;
function Valid (Item : in Num;
Pic : in Picture;
Currency : in String := Default_Currency)
return Boolean;
function Image (Item : in Num;
Pic : in Picture;
Currency : in String := Default_Currency;
Fill : in Character := Default_Fill;
Separator : in Character := Default_Separator;
Radix_Mark : in Character := Default_Radix_Mark)
return String;
procedure Put (File : in File_Type;
Item : in Num;
Pic : in Picture;
Currency : in String := Default_Currency;
Fill : in Character := Default_Fill;
Separator : in Character := Default_Separator;
Radix_Mark : in Character := Default_Radix_Mark);
procedure Put (Item : in Num;
Pic : in Picture;
Currency : in String := Default_Currency;
Fill : in Character := Default_Fill;
Separator : in Character := Default_Separator;
Radix_Mark : in Character := Default_Radix_Mark);
procedure Put (To : out String;
Item : in Num;
Pic : in Picture;
Currency : in String := Default_Currency;
Fill : in Character := Default_Fill;
Separator : in Character := Default_Separator;
Radix_Mark : in Character := Default_Radix_Mark);
end Decimal_Output;
private
... -- не определено языком
end Ada.Text_IO.Editing;
Исключение Constraint_Error возникает, если функция Image или любая из процедур Put вызывается с пустой строкой для Currency.
function Valid (Pic_String : in String;
Blank_When_Zero : in Boolean := False) return Boolean;
Valid возвращает True, если Pic_String — это правильно сформированная строка Picture (см. F.3.1), длина расширенной строки не превышает Max_Picture_Length, и либо Blank_When_Zero равно False, либо Pic_String не содержит '*'.
function To_Picture (Pic_String : in String;
Blank_When_Zero : in Boolean := False)
return Picture;
To_Picture возвращает объект Picture, такой что применение функции Pic_String к этому результату даёт расширенную строку Picture, эквивалентную Pic_String, и такое, что значение Blank_When_Zero, применённое к результату Picture, совпадает со значением параметра Blank_When_Zero. Picture_Error генерируется, если не Valid(Pic_String, Blank_When_Zero).
function Pic_String (Pic : in Picture) return String;

function Blank_When_Zero (Pic : in Picture) return Boolean;
Если Pic равно To_Picture(String_Item, Boolean_Item) для некоторых String_Item и Boolean_Item, то:
Pic_String(Pic) возвращает расширенную строку Picture, эквивалентную String_Item, и с любой строчной буквой, заменённой соответствующей заглавной,
Blank_When_Zero(Pic) возвращает Boolean_Item.
Если Pic_1 и Pic_2 — объекты типа Picture, то "="(Pic_1, Pic_2) равно True, когда:
Pic_String(Pic_1) = Pic_String(Pic_2), и
Blank_When_Zero(Pic_1) = Blank_When_Zero(Pic_2).
function Length (Pic : in Picture;
Currency : in String := Default_Currency)
return Natural;
Length возвращает Pic_String(Pic)'Length + Currency_Length_Adjustment – Radix_Adjustment, где
Currency_Length_Adjustment =
Currency'Length – 1, если в Pic_String(Pic) есть символ '$', и
0 в противном случае.
Radix_Adjustment =
1, если в Pic_Str(Pic) есть 'V' или 'v', и
0 в противном случае.
function Valid (Item : in Num;
Pic : in Picture;
Currency : in String := Default_Currency)
return Boolean;
Valid возвращает True, если Image(Item, Pic, Currency) не генерирует Layout_Error, и False в противном случае.
function Image (Item : in Num;
Pic : in Picture;
Currency : in String := Default_Currency;
Fill : in Character := Default_Fill;
Separator : in Character := Default_Separator;
Radix_Mark : in Character := Default_Radix_Mark)
return String;
Image возвращает отформатированную строку вывода, как определено в F.3.2 для Item, Pic_String(Pic), Blank_When_Zero(Pic), Currency, Fill, Separator и Radix_Mark. Если эти правила определяют ошибку форматирования, Image генерирует исключение Layout_Error.
procedure Put (File : in File_Type;
Item : in Num;
Pic : in Picture;
Currency : in String := Default_Currency;
Fill : in Character := Default_Fill;
Separator : in Character := Default_Separator;
Radix_Mark : in Character := Default_Radix_Mark);

procedure Put (Item : in Num;
Pic : in Picture;
Currency : in String := Default_Currency;
Fill : in Character := Default_Fill;
Separator : in Character := Default_Separator;
Radix_Mark : in Character := Default_Radix_Mark);
Каждая из этих процедур Put выводит Image(Item, Pic, Currency, Fill, Separator, Radix_Mark), соответствующую соглашениям для Put для других числовых типов в случае ограниченной длины строки (см. A.10.6, «Процедуры Get и Put»).
procedure Put (To : out String;
Item : in Num;
Pic : in Picture;
Currency : in String := Default_Currency;
Fill : in Character := Default_Fill;
Separator : in Character := Default_Separator;
Radix_Mark : in Character := Default_Radix_Mark);
Put копирует Image(Item, Pic, Currency, Fill, Separator, Radix_Mark) в заданную строку, выравнивая по правому краю. В противном случае неназначенные значения Character в To присваиваются пробелу. Если To'Length меньше длины строки, полученной в результате Image, то генерируется Layout_Error.

Требования к реализации

Max_Picture_Length должен быть не менее 30. Реализация должна поддерживать строки валюты длиной не менее 10 символов как для Default_Currency при инстанции Decimal_Output, так и для Currency при вызове Image или любой из процедур Put.
ПРИМЕЧАНИЯ
4 Правила форматированного вывода основаны на COBOL (ANSI X3.23:1985, одобренном ISO как ISO 1989-1985), с последующими отличиями:
Отсутствуют положения COBOL для локализации строк Picture и формата 'P'.
Следующие возможности Ada отсутствуют в COBOL:
размещение символа валюты после числа,
локализация строки отформатированного вывода для значений строк валюты из нескольких символов, включая поддержку сохранения и расширения длины символов валюты в строках Picture,
локализация знака разделителя, разделителя цифр и символа заполнения, и
установка значений отрицательных чисел в скобки.
Значение 30 для Max_Picture_Length соответствует таковому в COBOL.


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API