如何在Ruby中编辑文件的每一行,而不使用临时文件

时间:2012-10-02 04:27:23

标签: ruby file-io

有没有办法编辑文件中的每一行,而不涉及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

2 个答案:

答案 0 :(得分:1)

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'}

答案 1 :(得分:0)

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

如果文件足够小以适合内存,您可以读取它,修改它并将其写回。否则,您最好使用临时文件。