dポイントプレゼントキャンペーン実施中!

memo.txtの中に含まれている"俺の飯"という文字列を"私のごはん"というふうに置換を行いたいのですが、
現在のやり方だとファイルを開いて1行ずつ読み込んで新しいファイルに文字列を書きだしており
読み込んだ際、置換対象の文字列があった場合に置換して書きだしておりますが
このやり方だとどうしても新規ファイルを出力しなければいけません。
これを新規ファイルを作らずにmemo.txtの中身だけを書き換えるようにするには
どのような処理にすれば良いのでしょうか?

何卒宜しくお願い致します。

---- sample.rb
require 'rubygems'

open("memo.txt"){ |f|
open("after_memo.txt","w"){ |o|
while line = f.gets
line.gsub!("俺の飯", "私のごはん")
o.puts line
end
}
}

-- memo.txt
俺の飯はリーズナブル!
俺の飯美味しそう!

A 回答 (2件)

最も単純なのは、ファイルの内容すべてを IO.readlines などで変数に突っ込んで、置換した結果を memo.txt に上書き。

    • good
    • 0
この回答へのお礼

ありがとうございます。
IO.readlinesで行うことにしました。

お礼日時:2012/04/11 00:46

コマンドラインで -iオプションを使えば良いと思います。


% ruby -i -pe "$_.gsub! '俺の飯', '私のごはん'" memo.txt

バックアップを残したければ -iに引数を渡して、
% ruby -i~ ...
% ruby -i.bak ...
とか。前者はEmacsのように memo.txt~、後者は memo.txt.bak とバックアップされます。

コマンドラインでなければ、fileutilsライブラリのmvの処理をopenのブロック後に
付け加えれば良いと思います。
require 'fileutils'
...
open(...){...}
FileUtils.mv 'after_memo.txt', 'memo.txt'
    • good
    • 0
この回答へのお礼

詳しく書いていただきありがとうございました。
勉強になりました

お礼日時:2012/04/11 00:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!