0

ファイルを行ごとに調べようとしていますが、その行にハッシュキーが含まれている場合は、値を出力したいと思います。例えば:

Months = { "January" => 1,
           "February" => 2,
           "March" => 3
         }

そして、次を含むファイルがある場合:

February
January
March

出力を次のようにしたい:

2
1
3

誰か簡単なアドバイスをくれませんか?

4

2 に答える 2

2

次のデータ構造を想定しています。

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
}'
于 2012-08-06T23:06:07.803 に答える
1
months = { "January" => 1, "February" => 2, "March" => 3 }

File.open('yourfile.txt').each_line do |line|
  result = months[line.strip]
  puts result if result
end
于 2012-08-06T20:20:42.410 に答える