header:true
しようとしたらできなかったのでそのメモ
環境
$ ruby -v ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-darwin18]
どういうことか
BOM付きのファイルを CSV
クラスで読み込むと、先頭行にBOMの情報がついてしまう。そのため、headerのオプションを指定しても、そのheader名で値が取れなくなってしまう。
このBOMはExcelのデータをcsv形式で保存すると起きる。
例えば以下の内容をもつ profile.csv
があるとする
id,name,age 1,Taro,10 2,Ziro,11 3,Saburo,12
BOM付きの場合、headerの前に余計な文字列情報がつく
CSV.read('profile.csv',headers: true).headers # => ["<feff>id", "name", "age"]
やり方
エンコーディングにBOMをつけることで回避することができる。
CSV.read('profile.csv', encoding: 'BOM|UTF-8' ,headers: true).headers # => ["id", "name", "age"]
参考リンク
- BOM付きCSVを読み込む[Ruby 2.3.0] - Qiita - 多分2.3.0だとこの記述できなそう