2013-05-28 21 views
0
寫一個文本文件

我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> 

注意的是,除了光標的第一行在第二行,沒有寫入任何內容。

每當我的代碼文件中寫道,這種情況發生:

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

    r 

它創建另一個新行,而不是附加上這樣的二號線:

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

我該如何解決這個問題?

編輯:這是一個指針的問題,因爲我讀完整行之前,但我嘗試關閉並再次打開文件,指針仍然在第二行而不是回到開始。

+0

我不知道「這是一個指針問題」是什麼意思?什麼操作系統?什麼編譯器?您是否已在打開添加的文件之前驗證過它不會以兩個連續的EOL(LF,CF/LF或CR)結束? –

+0

指針問題我的意思是說,我在做一個get_line之前閱讀文件的整行並創建一個新行,將光標留在第二行的開頭,我不想要的東西,我希望它去文件的開始(由於某種原因關閉和打開文件並不能解決這個問題)。是的,我驗證了EOL的文件。 – user697110

+0

來自Ada 2012 LRM,A.10.2:'如果模式是Append_File,則實現定義頁面終止符是否將文件中的預先存在的文本與要寫入的新文本分開。「我猜這就是這裏發生的事情。 – flyx

回答

1

我在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; 

我編程方式創建的c.txt文件,使用PUT_LINE到輸出的文本,這是文件的內容:

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

我用Cygwin的od -t x1轉儲該文件,並看到它以0d 0a EOL序列(即CR/LF)終止。

運行上面代碼導致含有預期輸出文件:

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。)