2011-10-18 6 views
0

テキストファイルがあり、特定の行をハッシュ値で置き換えようとしています。私は、ファイルをループし、ハッシュに一致するものをスワップアウトしようとしています。なんらかの理由でこれは動作していません。ファイルを複製するだけで、何も交換しません。何か案は?ハッシュを含むファイル内の単語を入れ替えよう

HASHBROWNS{ 

'mustard' => 'dijon', 
'ketchup' => 'catsup', 

} 


File.open('new_hashed_file.txt', 'w') do |file| 
    File.open('oldfile.txt', 'r').readlines.each do |swaparoo| 
     if HASHBROWNS.has_key?(swaparoo.downcase) 
      file.puts HASHBROWNS[swaparoo.downcase] 
     else 
      file.puts swaparoo 
     end 
    end 
end 

おかげ

Rynの

答えて

2

変更この行:これまで

File.open('oldfile.txt', 'r').readlines.each do |swaparoo| 

File.open('oldfile.txt', 'r').readlines.map(&:chomp).each do |swaparoo| 

問題はラインのあなたの配列は、改行が含まれています。

+0

改行のことがループのために私を投げた!ありがとう! – Ryn

2

あなたはreadlinesでデータを読み込むときに、各文字列の中に存在改行があるでしょう。これはあなたの試合を欠場させるものです。簡単な方法は、chompで整理するだけです。注意を払うために

File.open('new_hashed_file.txt', 'w') do |file| 
    File.open('oldfile.txt', 'r').readlines.each do |line| 
    line = line.chomp.downcase 

    file.puts HASHBROWNS[line] || line 
    end 
end 

ことの一つは、あなたは、単に一時的な変数に結果を保存し、それを再利用することができるかどうdowncaseのようなメソッドを呼び出して、繰り返しではありません:あなたは少しあなたのテストを修正しない場合があります。

+0

私はダウンケーシングの方法を実装しています。これはずっと効率的です!ありがとう! – Ryn

関連する問題