ファイルが大きくない場合は、次のことを行うことができます。
コード
def replace_text(file_in, file_out, word_to_filename)
File.write(file_out,
File.read(file_in).gsub(Regexp.union(word_to_filename.keys)) { |word|
File.read(word_to_filename[word]) })
end
word_to_filename
キーword
がword_to_filename[word]
という名前のファイルの内容に置き換えられるようなハッシュです。
ファイルが大きい場合は、おそらくIO#foreachを使用して、このライン・バイ・ラインを実行します。
例
file_in = "input_file"
file_out = "output_file"
File.write(file_in, "Days of wine\n and roses")
#=> 23
File.write("wine_replacement", "only darkness")
#=> 13
File.write("roses_replacement", "no light")
#=> 8
word_to_filename = { "wine"=>"wine_replacement", "roses"=>"roses_replacement" }
replace_text(file_in, file_out, word_to_filename)
#=> 35
puts File.read(file_out)
Days of only darkness
and no light
Iは、上記の例で使用される説明
file_in
について
、file_out
とword_to_filename
次のように、手順は。
str0 = File.read(file_in)
#=> "Days of wine\n and roses"
r = Regexp.union(word_to_filename.keys)
#=> /wine|roses/
てみましょう最初の言葉は、正規表現と一致している参照してください。
str0.scan(r)
#=> ["wine", "roses"]
継続、
str1 = str0.gsub(r) { |word| File.read(word_to_filename[word]) }
#=> "Days of only darkness\n and no light"
File.write(file_out, str1)
#=> 35
str1
の計算では、gsub
最初は単語 "ワイン" と一致します。その文字列は、従って、ブロックに渡され、ブロック変数に割り当てられている:
word = "wine"
とブロック演算を行う。
str2 = word_to_filename[word]
#=> word_to_filename["wine"]
#=> "wine_replacement"
File.read("wine_replacement")
#=> "only darkness"
ので、「ワイン」は「のみ暗闇」に置き換えられます。 「バラ」の試合も同様に処理されます。
あなたは 'combinedconfig'ファイルを読む必要があります。 'text.gsub(" test "、File.open(combinedconfig、&:read))'のようなものですが、putsを使って出力しているので、これで何をしようとしているのか100%は確信していません。 – engineersmnky
ファイル内容の '' test "'を何か別のものに置き換えようとしていますか?たぶんあなたはそれを後方に持っています。 – tadman
@tadmanちょっとだけでなく、出力は単なるテストの目的である(私は新しい設定に組み合わせコンフィグを書きます)あなたの答え@Cary Swovelandため – FroggyFreshh