9

この手順を以下に印刷するとき-

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

私の質問は、すべての日付値の前に1文字の間隔を空けるのを防ぐ方法です。(日月年)。もちろん、私は保持日/月/年内の記録を持つ日付手順を使用しています。

前もって感謝します。

4

1 に答える 1

14

いくつかのオプションがあります。

  • 整数値が常に負でないことがわかっている場合は、文字列をスライスして先頭の空白を省略することができます。
  • Ada.Strings.Fixed.Trim()関数を使用して、空白を削除できます。
  • Put()プロシージャは、Ada.Text_IO.Integer_IOインスタンス化(インスタンス化された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;

これをGNATでコンパイルして実行すると、次のようになります。

$./int_image
Raw 'image    : 20:
Trimmed image :20:
Sliced image  :20:
'Put' image   :20:
于 2009-12-04T14:46:22.227 に答える