使用哈希交换文件中的单词

时间:2011-10-18 17:23:56

标签: ruby

我有一个文本文件,我试图用散列中的值替换某些行。我试图让它循环遍历文件,并交换任何匹配哈希的东西。由于某种原因,这不起作用,它只复制文件,不会交换任何东西。任何想法?

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 个答案:

答案 0 :(得分: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等方法。

答案 1 :(得分:2)

更改此行:

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

到此:

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

问题是你的数组行包含换行符。