1

次のコードを使用して、Ada でテキスト ファイルを開いています。

Open (File => out_parcial_variante1, Name => "c.txt", Mode => append_file);
put(File => out_parcial_variante1, Item=> "r");
close(out_parcial_variante1);

内部のこのような構造としてのファイル:

 01 #510.00:1003.00,512.04:1110.00,515.00:998.00,-98.00,-100.00
 <second empty line, this text is not in the file>

最初の行に加えて、カーソルは何も書かれていない 2 行目にあることに注意してください。

私のコードがファイルに書き込むたびに、これが起こります:

     01 #510.00:1003.00,512.04:1110.00,515.00:998.00,-98.00,-100.00

     r

次のように 2 行目に追加する代わりに、別の改行を作成します。

     01 #510.00:1003.00,512.04:1110.00,515.00:998.00,-98.00,-100.00
     r

これを修正するにはどうすればよいですか?

編集:以前に行全体を読んだので、ポインターの問題ですが、ファイルを閉じて再度開くと、ポインターは最初に戻るのではなく2行目に残ります。

4

1 に答える 1

2

Windows で GNAT 2012 を使用して簡単なテスト プログラムを作成したところ、期待どおりに動作しました。

コード:

with Ada.Text_IO;
use Ada.Text_IO;

procedure Append_Test is

   OPV: File_Type;

begin
   Open (OPV, Append_File, "c.txt");
   Put (OPV, "r");
   Close (OPV);
end Append_Test;

テキストを出力するために Put_Line を使用して、プログラムで c.txt ファイルを作成しました。これがファイルの内容です。

01 #510.00:1003.00,512.04:1110.00,515.00:998.00,-98.00,-100.00

Cygwin を使用してファイルをダンプしたところ、 EOL シーケンス、つまり CR/LFod -t x1で終了したことがわかりました。0d 0a

上記のコードを実行すると、期待される出力を含むファイルが生成されます。

01 #510.00:1003.00,512.04:1110.00,515.00:998.00,-98.00,-100.00
r

で再びダンプするとod、で終わるファイルが表示されました0d 0a 72 0d 0a。これが元の EOL で、「r」と別の EOL が追加されています。

これがあなたに起こっていない場合、あなたが実際に何をしているのかは明らかではありません. (Linux では、0d 0aシーケンスは単に . になることに注意してください0a。)

于 2013-05-28T16:28:41.533 に答える