如何在不使用临时文件的情况下在 Ruby 中编辑文件的每一行



有没有办法在不涉及 2 个文件的情况下编辑文件中的每一行?比如说,原始文件有,

test01
test02
test03

我想像这样编辑它

test01,a
test02,a
test03,a

尝试了代码块中显示的内容,但它替换了一些字符。

将其写入临时文件然后替换原始文件有效,但是,我需要经常编辑文件,因此更喜欢在文件本身中进行。任何指示都值得赞赏。

谢谢!

File.open('mytest.csv', 'r+') do |file|
  file.each_line do |line|        
      file.seek(-line.length, IO::SEEK_CUR)
      file.puts 'a'        
  end
end
f = open 'mytest.csv', 'r+'
r = f.readlines.map { |e| e.strip << ',a' }
f.rewind
f.puts r
f.close # you can leave out this line if it's the last one that runs

这是一个单行变体,请注意,在这种情况下,2 个描述符保持打开状态,直到程序退出。

open(F='mytest.csv','r+').puts open(F,'r').readlines.map{|e|e.strip<<',a'}

写入文件不会插入;它总是覆盖。 这使得就地修改文本变得很尴尬,因为每次添加新内容时都必须重写文件的其余全部内容。

如果文件足够小,可以放入内存,则可以将其读入、修改,然后再写出。 否则,您真的最好使用临时文件。

最新更新