2011-07-28 6 views
2

Adaでデフォルトの整数イメージ()の幅を変更するにはどうすればよいですか?私はiは、例えば5であり、かつ過剰スペースなしエイダ出力に番号を持つput("this is a number: " & i'img);のようなものを行うことができるようにしたいと思いAdaでのデフォルトの整数イメージ()

..

現在、私はput("this is a number: "); put(i, 0);をしなければならない...

これを回避する方法はありますか?

ところで、私が知っているX'imgはブヨ拡張子:)

+0

同様の質問への答え:http://stackoverflow.com/questions/1846737/cancel-space-after-integerimage-value-in-ada/ 1847396#1847396 –

答えて

3

のようなものを試してみてくださいです:

Package K is 
    Type New_Type is New Integer; 
private 
    Function Image(Item : In New_Type) Return String; 
End K; 

Package Body K is 
    Use Ada.Text_IO; 

    Function Image(Item : In New_Type) Return String is 
    begin 
     Return ("This is a number: " & Integer'Image(Integer(Item))); 
     -- You could also add a local integer variable, say Integer_Value, 
     -- initialized to Integer(Item) and then use Integer_Value'Img. 
    end Image; 
End K; 
+0

+1の移植性。 – trashgod

+0

「Ada.Text_IO;を使用する」とは何ですか? – oenone

+0

Ada.Text_IOは、テキスト入力および出力関数用に事前定義されたパッケージです。 Image関数の例で使用されているPut_Lineが含まれています。 – Shark8

2

あなたはそれが今ではほとんどの柔軟性を提供してやっている途中の道。 'Imageまたは'Imgを使用すると、常に正の値のためのスペースと負の値のための「 - 」が含まれます。 §A.10.8 Input-Output for Integer Typesは、汎用パッケージAda.Text_IO.Integer_IOで利用可能な手順Putを示しています。

package Ada.Integer_Text_IO is new Ada.Text_IO.Integer_IO(Integer); 

また、標準で規定されている定義済みのインスタンスを使用することもできます。名前の変更は、便利なことがあります

with Ada.Integer_Text_IO; 
package Int_IO renames Ada.Integer_Text_IO; 

便宜上、あなたはStringを返す関数を定義することができますし、String concatenation operator, &でそれを使用しています。

+1

'' Image''は、デバッグやロギングの目的でのみ使用してください。 – oenone

+0

@enone: '' Image'は、 'Ada.Calendar.Formatting'や' Ada.Text_IO.Editing'のようなパッケージの実装でよく見られます。 、他の中で。あなたは精緻化できますか? – trashgod

0

あなた自身の画像機能を書くだけですか?

function Image (X : in Integer) return String is 
    Img : constant String := Integer'Image (X); 
begin 
    if X < 0 then 
     return Img; 
    else 
     return Img (2 .. Img'Length); 
    end if; 
end Image; 

その後、あなただけ行くことができます:

put("this is a number: " & Image (i)); 
関連する問題