我一直在尝试开发一种算法,该算法在某些时候需要将结果写入文件的开头或结尾。
我试图创建一种排序算法,它不会使用尽可能多的RAM,因为我的文件要排序太大,不适合我当前的规格。因此,对于额外时间的成本,我想直接执行此操作而不是RAM。
我知道可以用这种方式在Julia中编写文件>
write(outfile,"A, B, C, D\n")
但我似乎无法找到如何写入它的开头。
感谢您的帮助。
答案 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,因为每次都需要将整个数据集读入内存。