在Ada中的Integer'Image值之后取消空格

fir*_*ruq 8 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;
Run Code Online (Sandbox Code Playgroud)

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

我的问题是如何在每个Date值之前阻止一个字符的间距.(日月年).当然我正在使用日期程序,记录里面的日/月/年.

提前致谢.

Mar*_*c C 12

你有几个选择:

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

这里有一些代码来说明:

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;
Run Code Online (Sandbox Code Playgroud)

使用GNAT编译并运行它会产生:

$./int_image
Raw 'image    : 20:
Trimmed image :20:
Sliced image  :20:
'Put' image   :20:
Run Code Online (Sandbox Code Playgroud)