当我在下面打印此过程时-

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;

结果是(例如):1- 1- 2010

我的问题是如何防止在每个Date值前留一个字符。 (日月年)。
当然,我在记录日期/月份/年份内使用日期过程。

提前致谢。

最佳答案

您有几种选择:

  • 如果您知道Integer值始终为非负数,则可以对字符串进行切片以省略前导空格。
  • 您可以使用Ada.Strings.Fixed.Trim()函数修剪空白。
  • 您可以从Ada.Text_IO.Integer_IO实例化(例如预先实例化的Ada.Integer_Text_IO)中使用Put()过程。

  • 这是一些代码来说明:
    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;
    

    使用GNAT编译并运行它会产生:
    $./int_image
    Raw 'image    : 20:
    Trimmed image :20:
    Sliced image  :20:
    'Put' image   :20:
    

    10-06 05:19
    查看更多