如何在文本文件的中间插入一行?

时间:2017-06-15 06:17:34

标签: ruby

myFile.txt包含

This is a sample file
This contains some data
End of file

我将创建一个内容字符串(动态)并将数组写入文件

我尝试使用r +模式,但它会覆盖现有内容

file = File.open('myFile.txt','r+')
myString = 'Dynamic content' # varies accordingly for each file based on file
while (line = @file.gets)
  next unless line =~ /sample file/
  @file.puts(myString)
  break
end

但它导致myFile.txt包含

This is a sample file
Dynamic content
e data
End of file

我尝试使用+模式,它附加到最后一个,因为追加模式添加到文件的最后一个

我试图将myFile.txt设为

This is a sample file
Dynamic content
This contains some data
End of file

ruby​​中还有其他方法/模式吗?

1 个答案:

答案 0 :(得分:4)

将文件视为一张纸。一旦你写了一些东西,添加内容的唯一安全方法是追加。如果不覆盖某些内容,则无法在纸张中间书写文字。

通常,这种插入是通过临时文件完成的。它是这样的:

  1. 用于阅读的开源文件source
  2. 创建新文件target以便撰写
  3. source读取到插入点并将其写入target
  4. 将您的新内容写入target
  5. 将剩余的source复制到target
  6. 关闭文件
  7. 删除/重命名source
  8. target重命名为source的名称。