我在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 :(得分: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
。)