2009-12-04 13 views
8

quando sono stampa questa procedura riportata di seguito -Annulla spazio dopo valore Integer'Image in 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; 

Il risultato è (per esempio): 1- 1- 2010

La mia domanda è come evitare la spaziatura di un carattere prima di ogni valore di Data. (giorno mese Anno). Ovviamente sto usando la procedura Date con record all'interno di holding day/month/year.

Grazie in anticipo.

risposta

9

avete alcune opzioni:

  • Se si conosce il valore intero è sempre non negativo, è possibile affettare la stringa di omettere il vuoto leader.
  • È possibile utilizzare la funzione Ada.Strings.Fixed.Trim() per tagliare lo spazio vuoto.
  • È possibile utilizzare la procedura Put() da una istanza Ada.Text_IO.Integer_IO (come ad esempio l'Ada.Integer_Text_IO).

Ecco po 'di codice per illustrare:

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; 

La compilazione e l'esecuzione di questo con i rendimenti GNAT:

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