在Ada中编写文本文件时换行符

时间:2013-05-28 14:50:12

标签: ada

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

我该如何解决这个问题?

编辑:这是一个指针问题,因为我之前读过整行,但我尝试关闭并再次打开文件,指针仍然在第二行,而不是回到开头。

1 个答案:

答案 0 :(得分: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;

我以编程方式创建了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。)