Ruby で CSV を扱う際に便利な gem である SmarterCSV

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

ドキュメントに詳細あり

他の場合の例も 公式ドキュメント に記載がありますのでそちらを参照しましょう。

*1:見落としているだけかも

*2:ただし、CSV のバリデーションにエラーがないことが前提です

Powered by はてなブログ