0

lookup.csvの値に基づいて呼び出された CSV ファイルから値を取得しmaster.csv、新しいファイルを として保存する最良の方法を見つけようとしていますoutput.csv

以下の例では、マスター ファイルには 3 つの列のデータがあり、最後の列はCityです。City名前をファイルのCity Codelookup.csv置き換えたいと思います。

検索できるDBがないため、CSVファイルを使用する必要があります。Ruby 1.8.7 で FasterCSV を使用しようとしています。

ファイル構造の例:

マスター.csv:

First Name | Last Name | City
Joey       | Jello     | Atlanta
Home       | Boy       | Dallas

ルックアップ.csv:

City    | City ID
Atlanta | 12345
Dallas  | 12346
Houston | 12347

出力.csv:

First Name | Last Name | City
Joey       | Jello     | 12345
Home       | Boy       | 12346
4

1 に答える 1

1

私は1.9を使用しています。これは標準ライブラリのようにFasterCSV利用できます。CSVまず、以下からルックアップハッシュを作成しますlookup.csv

cities = Hash[CSV.read('lookup.csv', :col_sep => ' | ').to_a[1..-1]]

ファイルが非常に大きい場合は、ファイルを繰り返し処理して、CSV.foreach行ごとにハッシュを作成することをお勧めします。

cities = {}
CSV.foreach('lookup.csv', :col_sep => ' | ', :headers => true, :return_headers => false) do |line|
  cities[line['City']] = line['City ID']  
end  

次に、繰り返してmaster.csv、ハッシュで都市のルックアップを実行し、それを次のように書き込みますoutput.csv

CSV.open('output.csv', "w", :headers => ['First Name', 'Last Name', 'City ID'], :write_headers => true) do |output|
  CSV.foreach('master.csv', :col_sep => ' | ', :headers => true, :return_headers => false) do |line|
    output << [line['First Name'], line['Last Name'], cities[line['City']]]
  end  
end
于 2012-06-20T21:08:44.467 に答える