注意というか自分が多少ハマったのでメモしておきます。
次のようなカラムのテーブルデータのcsvを読み込もうとして、 CSV.table
を使って読み込もうとしました。
CampaignId,CampaignName
1000,example1
1001,example2
すると以下のように自動で小文字に変換されてしまっていました。これによって一部のキャンペーン情報が読み取れずにエラーが発生してしまっていました。
require 'csv'
table = CSV.table("report.csv")
p row[0][:CampaignId]
# => nil
p row[0][:campaignid]
# => 1000
実際にドキュメントを読むと、 header_converters: :symbol
が設定されており、
CSV.read( path, { headers: true,
converters: :numeric,
header_converters: :symbol }.merge(options) )
HeaderConvertsの挙動は以下のようなものらしいです。
ヘッダの文字列を小文字に変換してから、空白文字列 (\s) をアンダースコアに 置換し、非英数字 (\W) を削除します。最後に String#to_sym を呼び出します。