2009-12-04 27 views
8

kiedy jestem drukiem ta procedura poniżej -Anuluj miejsca po wartości Integer'Image w Ada

procedure put (Date:Date_Type) is 
begin 
    Put(Integer'Image(Date.Day)); --' 
    Put("-"); 
    Put(Integer'Image(Date.Month)); --' 
    Put("-"); 
    Put(Integer'Image(Date.Year)); --' 
end; 

Rezultatem jest (na przykład): 1- 1- 2010

Moje pytanie brzmi, jak zapobiec odstępowi jednego znaku przed każdą wartością daty. (dzień miesiąc rok). Oczywiście używam procedury Data z zapisem w środku dnia/miesiąca/roku.

Z góry dziękuję.

Odpowiedz

9

Masz kilka opcji:

  • Jeśli znasz wartość całkowita jest zawsze nieujemna, można pokroić ciąg pominąć prowadząc puste.
  • Możesz użyć funkcji Ada.Strings.Fixed.Trim(), aby przyciąć puste miejsce.
  • Możesz użyć procedury Put() z instancji Ada.Text_IO.Integer_IO (takiej jak preinstantated Ada.Integer_Text_IO).

Oto niektóre kodu do zilustrowania:

with Ada.Text_IO; 
with Ada.Integer_Text_IO; 
with Ada.Strings.Fixed; 

procedure Int_Image is 

    use Ada.Text_IO; 
    use Ada.Integer_Text_IO; 
    use Ada.Strings.Fixed; 

    N : Integer := 20; 

    Raw_Image  : constant String := Integer'Image(N); 

    Trimmed_Image : constant String := Trim(Raw_Image, Ada.Strings.Left); 

    Sliced_Image : constant String := Raw_Image(2 .. Raw_Image'Last); 

begin 
    Put_Line("Raw 'image :" & Raw_Image & ":"); 
    Put_Line("Trimmed image :" & Trimmed_Image & ":"); 
    Put_Line("Sliced image :" & Sliced_Image & ":"); 
    Put  ("'Put' image :"); 
    Put  (N, Width => 0); 
    Put_Line(":"); 
end Int_Image; 

Kompilacja i działa to z wydajnością Gnat:

$./int_image 
Raw 'image : 20: 
Trimmed image :20: 
Sliced image :20: 
'Put' image :20: