2016-04-04 7 views
0

で文字列を置き換えだから今、私はちょうどcombinedconfigと私の文字列「test」を交換するが、これの出力は私のディレクトリである私が今ルビー:GSUBだから私は、私は谷の構成ファイルをループしたときに、私は特定の単語(この例では「テスト」私はこれをしたいを参照してくださいよ 異なる設定ファイルを組み合わせた機能に取り組んでいるファイル

def self.configIncludes(config) 
config = @configpath #path to config 

combinedconfig = @configpath #for test purposes 

doc = File.open(config) 
text = doc.read 
combinedConfig = text.gsub("test" , combinedconfig) 
puts combinedConfig 

のためにこれを持っているファイル(複数行のテキスト)

に置き換えること設定は、私はreplaするにはどうすればよい

を置いていますテキストでそれを守る? すべてのサポートが高く評価されています。

+1

あなたは 'combinedconfig'ファイルを読む必要があります。 'text.gsub(" test "、File.open(combinedconfig、&:read))'のようなものですが、putsを使って出力しているので、これで何をしようとしているのか100%は確信していません。 – engineersmnky

+0

ファイル内容の '' test "'を何か別のものに置き換えようとしていますか?たぶんあなたはそれを後方に持っています。 – tadman

+0

@tadmanちょっとだけでなく、出力は単なるテストの目的である(私は新しい設定に組み合わせコンフィグを書きます)あなたの答え@Cary Swovelandため – FroggyFreshh

答えて

0

ファイルが大きくない場合は、次のことを行うことができます。

コード

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キーwordword_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_outword_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" 

ので、「ワイン」は「のみ暗闇」に置き換えられます。 「バラ」の試合も同様に処理されます。

+0

感謝 – FroggyFreshh

関連する問題