朱莉娅 - 写到文件的开头

时间:2016-02-11 04:34:05

标签: file-io julia writing

我一直在尝试开发一种算法,该算法在某些时候需要将结果写入文件的开头或结尾。

我试图创建一种排序算法,它不会使用尽可能多的RAM,因为我的文件要排序太大,不适合我当前的规格。因此,对于额外时间的成本,我想直接执行此操作而不是RAM。

我知道可以用这种方式在Julia中编写文件>

write(outfile,"A, B, C, D\n")

但我似乎无法找到如何写入它的开头。

感谢您的帮助。

3 个答案:

答案 0 :(得分:6)

s=open("test.txt", "a+");
write(s,"B");
write(s,"C");
position(s) # => 2
seekstart(s);
position(s) # => 0
write(s,"A"); # be careful you are overwriting B!
position(s) # => 1
close(s);
s=open("test.txt", "r");
read(s,Char) # => 'A'
read(s,Char) # => 'C' # we lost 'B'!

所以如果你喜欢前置!某些文件流,上面的解决方案不起作用。

cdata=readall(s);
seekstart(s);
write(s,prependdata);
write(s,cdata);

答案 1 :(得分:4)

您可以使用两个文件而不是一个文件,就像实现时一样 a deque with two stacks

  • 要附加数据,请附加到第一个文件:它将存储数据的尾部。

  • 要预先添加数据,附加到第二个文件:它将存储数据的头部,但顺序相反。

  • 当您需要单个文件中的数据时(可能只需一次,在算法结束时),反转第二个文件中的行并连接文件。

答案 2 :(得分:0)

无法将数据添加到磁盘文件中。

没有"插入模式"写入文件流时。

如果你的文件对于你当前的规格来说太大了,我建议改用数据库。

如果数据集的大小不是问题,您可以始终将现有文件的内容读入内存,将新数据添加到内存中,然后覆盖整个文件。它实际上并没有节省RAM,因为每次都需要将整个数据集读入内存。