SmarterCSV
Ruby で CSV を扱う際には標準ライブラリが便利です。
Ruby標準添付ライブラリcsvのCSV.tableメソッドが最強な件について
ただ、このライブラリでは面倒な操作を行う際には SmarterCSV
という gem もとても便利です。
SmarterCSV の使い方
ドキュメントにもありますが、基本的な使い方は以下のとおりです。gem のインストールや gem の require
は省略します。
1. CSVファイル を読み込む
CSVファイル として your_csv_file.csv
を用意します。このファイルの内容は以下のようになっているとします。
first name,last name,age taro,tanaka,23 keiko,yamada,21 tomoko,yamamoto,25 kenji,saito,20
この CSVファイル は以下のように process
というクラスメソッドで読み込めます。戻り値は配列になっています。配列の要素はハッシュです。
data = SmarterCSV.process('your_csv_file.csv')
2. 「1.」の戻り値を表示させる
「1.」の戻り値を表示させて内容を確認します。
data.each { |element| puts element }
結果は以下のとおりになります。
{:first_name=>"taro", :last_name=>"tanaka", :age=>23} {:first_name=>"keiko", :last_name=>"yamada", :age=>21} {:first_name=>"tomoko", :last_name=>"yamamoto", :age=>25} {:first_name=>"kenji", :last_name=>"saito", :age=>20}
このような戻り値なので、場面によって標準ライブラリと使い分けることで効率的な処理が行えるのではないかと思います。
補足
日本語のヘッダでもシンボルで返してくれる
日本語ヘッダもシンボルで返してくれます。標準ライブラリだとヘッダが日本語の場合は面倒です。
ヘッダのシンボルの置き換え方法
読み込み時はデフォルトでヘッダ名をそのままシンボルに変換してくれます。オプションを指定した場合は、任意のシンボル名に変換が可能です。以下、例です。オプションとして key_mapping
にハッシュを渡してやれば OK です。
data = SmarterCSV.process(source_file, key_mapping: { first_name: :namae, last_name: :myoji })
ヘッダの取得方法
ヘッダを取得するメソッドは用意されていないようなので*1、力技でこうするのがよいかと思います*2。
header = data.first.keys
ドキュメントに詳細あり
他の場合の例も 公式ドキュメント に記載がありますのでそちらを参照しましょう。