Zoeken…


Invoering

De standaardpakketten van Ada bieden uitvoer van alle numerieke typen. Het uitvoerformaat kan op vele manieren worden aangepast.

Opmerkingen

Merk op hoe elke keer een generiek pakket wordt geïnstantieerd met een numeriek type. Er zijn ook beide standaardwaarden die voor de hele instantie moeten worden ingesteld, en ook manieren om de Width te overschrijven, bijvoorbeeld wanneer u Put met deze parameter aanroept.

Integer_IO van Integer_IO hebben een instellingsvariabele Default_Width die het aantal tekens dat elk uitvoernummer zal nemen.

with Ada.Text_IO;   use Ada.Text_IO;

procedure Print_Integer is
    subtype Count is Integer range -1_000_000 .. 1_000_000;

    package Count_IO is new Integer_IO (Count);
    X : Count;
begin
    Count_IO.Default_Width := 12;

    X := Count'First;
    while X < Count'Last loop
        Count_IO.Put (X);
        Count_IO.Put (X + 1);
        New_Line;

        X := X + 500_000;
    end loop;
end Print_Integer;

Resultaat

    -1000000
     -500000
           0
      500000

Een instellingsvariabele Default_Base wordt ingesteld op het exemplaar van Ada.Text_IO.Integer_IO ; ook is Default_Width zo ingesteld dat uitvoer geen voorloopruimte kan hebben.

with Ada.Text_IO;   use Ada.Text_IO;

procedure Print_Hex is
    subtype Count is Integer range -1_000_000 .. 1_000_000;

    package Count_IO is new Integer_IO (Count);
    X : Count;
begin
    Count_IO.Default_Width := 1;
    Count_IO.Default_Base := 16;

    X := Count'First;
    while X < Count'Last loop
        Count_IO.Put (X);
        New_Line;

        X := X + 500_000;
    end loop;
end Print_Hex;

Resultaat

-16#F4240#
-16#7A120#
16#0#
16#7A120#

Decimale cijfers met vaste punten afdrukken, ook bekend als Money

Ada.Text_IO.Editing biedt opmaak decimale vaste puntwaarden met behulp van " Ada.Text_IO.Editing ". Deze beschrijven uitvoer met behulp van "magische" tekens voor scheidingstekens, valutatekens, enz.

with Ada.Text_IO.Editing;   use Ada.Text_IO;

procedure Print_Value is

    Max_Count      : constant := 1_000_000;

    type Fruit is (Banana, Orange, Pear);
    subtype Count is Integer range -Max_Count .. +Max_Count;

    type Money is delta 0.001 digits 10;

    package Fruit_IO is new Enumeration_IO (Fruit);
    package Money_IO is new Editing.Decimal_Output
      (Money,
       Default_Currency => "CHF",
       Default_Separator => ''');

    Inventory : constant array (Fruit) of Count :=
      (Banana => +27_420,
       Orange => +140_600,
       Pear   => -10_000);

    Price_List : constant array (Fruit) of Money :=
      (Banana => 0.07,
       Orange => 0.085,
       Pear   => 0.21);

    Format : constant Editing.Picture :=
      Editing.To_Picture ("<###BZ_ZZZ_ZZ9.99>");
begin
    Fruit_IO.Default_Width := 12;

    for F in Inventory'Range loop
        Fruit_IO.Put (F);
        Put          (" | ");
        Money_IO.Put (Item => Inventory (F) * Price_List (F),
                      Pic => Format);
        New_Line;
    end loop;
end Print_Value;

Resultaat

BANANA       |  CHF     1'919.40 
ORANGE       |  CHF    11'951.00 
PEAR         | (CHF     2'100.00)

Meerdere items op één regel afdrukken

Combineer de instanties van de _IO pakketten, gebruik de juiste met het numerieke type.

with Ada.Text_IO;   use Ada.Text_IO;

procedure Print_Inventory is
    type Fruit is (Banana, Orange, Pear);
    subtype Count is Integer range -1_000_000 .. 1_000_000;

    package Fruit_IO is new Enumeration_IO (Fruit);
    package Count_IO is new Integer_IO (Count);

    Inventory : constant array (Fruit) of Count :=
      (Banana => 27_420,
       Orange => 140_600,
       Pear   => -10_000);

begin
    Fruit_IO.Default_Width := 12;

    for F in Inventory'Range loop
        Fruit_IO.Put (F);
        Put          (" | ");
        Count_IO.Put (Inventory (F));
        New_Line;
    end loop;
end Print_Inventory;

Resultaat

BANANA       |    27420
ORANGE       |   140600
PEAR         |   -10000


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow