2011-11-01 42 views
0

可能重複:
Newbie: text replacement in my case更新openned文件的內容

在我的Rails應用程序,我有我的助手如下方法:通過打開的文件:

content = File.open(myfile.txt) 

該文件的內容是這樣的:

my.car , my.seat, my.age; 
my.son , my.dog, my.chair; 
... 

我想更新該文件在方式更換內容的所有「我」到「她」

我知道我可以代替「我」「她的」由:

content = File.open('myfile.txt').read 

content.split(';').each do |line| 
     line.gsub!(/my/, "her") 
end 

但這隻能更換時,輸出內容系,該文件的內容不改變的字符串。 如何將openned文件的內容更新爲:

her.car , her.seat, her.age; 
her.son , her.dog, her.chair; 
... 

------------------- UPDATE(我試過)---- -----------------

我試過以下的方法,但它並沒有清理舊內容,只是追加了新內容,我想只有新的內容,那麼該怎麼辦?

File.open('myfile.txt', 'r+') do |myfile| 
     content = myfile.read 

     content.split(';').each do |line| 
     newline = line.gsub!(/my/, "her") 
     myfile.write(newline+';') 
     end 

end 
+0

這正是,逐字,同樣的問題http://stackoverflow.com/questions/7965199/newbie-text-replacement-in-my-case。我投票結束這一次:P – jaydel

+0

這是一個新話題。比舊的更清楚。我覺得最好保留這一個 –

+0

你應該更新舊的更清楚。不會產生新的問題。 – Mischa

回答

1

您必須將內容寫回到文件中。

現在,您實際上沒有文件本身的變量,只是您正在閱讀的內容。

首先讀入內容,然後關閉文件,然後打開它進行寫入。

試試這個:

content = File.open('myfile.txt').read 

File.open('myfile.txt', 'w') do |myfile|  
    content.split(';').each do |line| 
    line.gsub!(/my/, "her") 
    write(line) 
    end 
end 

注:沒有測試過,我建議在Ruby文件閱讀起來。

+0

請檢查我的更新... –

+1

由於文件指針已經高級化,所以在最後寫入之前需要調用'myfile.seek(0)'。 – d11wtq

+0

是的,不錯的地方。或者 - 關閉文件並重新打開進行寫入。我已經更新了我的答案以符合這一點。 –