2012-10-02 32 views
0

有沒有辦法編輯文件中的每一行,而不涉及2個文件?再說了,原來的文件有,如何在不使用臨時文件的情況下編輯Ruby中的每一行文件

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 

回答

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

太棒了!非常感謝,它的工作原理。 –

0

寫入文件不會插入;它總是覆蓋。這使得在原地修改文本變得很尷尬,因爲每次添加新內容時都必須重寫文件的全部內容。

如果文件足夠小以適應內存,則可以讀取它,修改它並將其寫回。否則,你真的比臨時文件更好。

相關問題