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

F.3.3 Пакет Text_IO.Editing

Пакет Text_IO.Editing предоставляет частный тип Picture с ассоциированными операциями и обобщённый пакет Decimal_Output. Объект типа 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 — это корректная строка шаблона (см. F.3.1), длина расширения которой не превышает Max_Picture_Length, и если либо Blank_When_Zero ложно, либо Pic_String не содержит '*'.
function To_Picture (Pic_String : in String;
Blank_When_Zero : in Boolean := False)
return Picture;
To_Picture возвращает объект типа Picture, такой что применение функции Pic_String к этому результату даёт расширенную строку шаблона, эквивалентную 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) возвращает расширенную строку шаблона, эквивалентную String_Item, и с любой строчной буквой, заменённой соответствующей прописной буквой, и
  • Blank_When_Zero(Pic) возвращает Boolean_Item.
Если Pic_1 и Pic_2 — объекты типа Picture, то "="(Pic_1, Pic_2) истинно, когда
  • 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) в заданную строку, выравнивая её вправо. В противном случае неназначенные символы в 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 для локализации строк шаблонов и для формата 'P'.
  • Следующие возможности Ada отсутствуют в COBOL:
  • размещение символа валюты после числа,
  • локализация строки отформатированного вывода для значений многосимвольных строк валют, включая поддержку сохраняющих и расширяющих длину валют символов в строках шаблонов
  • локализация знака разделителя, разделителя цифр и символа заполнения, и
  • скобки для отрицательных значений.
END_OF_DOCUMENT_MARKER
Значение 30 для Max_Picture_Length соответствует тому же ограничению, что и в COBOL.


Spec-Zone.ru

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