ファイルを行ごとに調べようとしていますが、その行にハッシュキーが含まれている場合は、値を出力したいと思います。例えば:
Months = { "January" => 1,
"February" => 2,
"March" => 3
}
そして、次を含むファイルがある場合:
February
January
March
出力を次のようにしたい:
2
1
3
誰か簡単なアドバイスをくれませんか?
次のデータ構造を想定しています。
data = 'Months = { "January" => 1,
"February" => 2,
"March" => 3
}'
これはそれをスキャンして、月の名前に関連付けられた数字を見つけます。
months_to_find = %w[January February March]
months_re = Regexp.new(
'(%s) .+ => \s+ (\d+)' % months_to_find.join('|'),
Regexp::IGNORECASE | Regexp::EXTENDED
)
Hash[*data.scan(months_re).flatten]['January'] # => 1
ここで魔法が起こります:
months_re = Regexp.new(
'(%s) .+ => \s+ (\d+)' % months_to_find.join('|'),
Regexp::IGNORECASE | Regexp::EXTENDED
)
この正規表現を作成します:
/(January|February|March) .+ => \s+ (\d+)/ix
にさらに月を追加しmonths_to_find
ます。
データが次のように変更された場合、これは引き続き機能します。
data = 'Months = { "The month is January" => 1,
"The month is February" => 2,
"The month is March" => 3
}'
months = { "January" => 1, "February" => 2, "March" => 3 }
File.open('yourfile.txt').each_line do |line|
result = months[line.strip]
puts result if result
end