在Ada中编写文本文件时换行
我正在用Ada打开一个文本文件,代码如下:在Ada中编写文本文件时换行,ada,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
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
我该如何解决这个问题
编辑:这是一个指针问题,因为我以前读过整行,但我尝试再次关闭和打开文件,指针保留在第二行,而不是回到开头 我用GNAT 2012在Windows上编写了一个快速测试程序,它的工作原理与预期相符 代码: 我以编程方式创建了c.txt文件,使用Put_行输出文本,这是文件的内容:
01 #510.00:1003.00,512.04:1110.00,515.00:998.00,-98.00,-100.00
我使用Cygwin的od-tx1
转储文件,并看到它以0d0a
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上,
0d0a
序列只是0a
)我不知道你说的“这是指针问题”是什么意思?什么操作系统?什么编译器?在打开要附加的文件之前,您是否验证过它不会以两个连续的EOL(LF、CF/LF或CR)结束?指针问题是指我在读取文件的整行之前执行get_行,并创建一个新行,将光标保留在第二行的开头,这是我不想看到的,我希望它转到文件的开头(出于某种原因,关闭和打开文件并不能解决这个问题)。是的,我验证了EOL的文件。来自Ada 2012 LRM,A.10.2:如果模式为Append\u file,页面终止符是否将文件中先前存在的文本与要写入的新文本分开是由实现定义的。
我猜这就是这里发生的情况。因此我假设没有办法避免这种情况?如果我理解正确,从文件中读取对其内容没有影响。也就是说,如代码所示,通过以追加模式打开它,它将在文件中保留文本后追加到文件中。
01 #510.00:1003.00,512.04:1110.00,515.00:998.00,-98.00,-100.00
01 #510.00:1003.00,512.04:1110.00,515.00:998.00,-98.00,-100.00
r