إلغاء الفضاء بعد قيمة عدد صحيح في ADA

StackOverflow https://stackoverflow.com/questions/1846737

  •  12-09-2019
  •  | 
  •  

سؤال

عندما أطبع هذا الإجراء أدناه -

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

سؤالي هو كيفية منع تباعد حرف واحد قبل كل قيمة تاريخية. (يوم شهر سنة). بالطبع أنا أستخدم إجراءات التاريخ مع سجل داخل يوم عقد / شهر / سنة.

شكرا مقدما.

هل كانت مفيدة؟

المحلول

لديك بعض الخيارات:

  • إذا كنت تعرف قيمة عدد صحيح غير سلبي دائما، فيمكنك أن تقطع السلسلة لحذف الفراغ الرائد.
  • يمكنك استخدام وظيفة ADA.STRINGS.FIXED.TRIM () لتقليص قبالة الفراغ.
  • يمكنك استخدام إجراء POD () من إنشاء مثيل Ada.text_io.integer_io (مثل Ada.internger_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;

تجميع وإدارة هذا مع غلة النات:

$./int_image
Raw 'image    : 20:
Trimmed image :20:
Sliced image  :20:
'Put' image   :20:
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top