我有一个文本文件,我试图用散列中的值替换某些行。我试图让它循环遍历文件,并交换任何匹配哈希的东西。由于某种原因,这不起作用,它只复制文件,不会交换任何东西。任何想法?
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
答案 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|
问题是你的数组行包含换行符。