csvを変換するツールの作成依頼をうけて、特に難しい処理もなかったので2つ返事でOKしました。
やりたいこと 生csv -> よしなに集計 -> 別サービスにインポート用のcsv
最初にもらったcsvをベースに正解状態になるようにスクリプトを書いていきます。 ほどなくしてスクリプトの作成は終わり、念のため別の生csvでスクリプトを試したときに悲劇は起こりました。
_人人人人人人人人人_
> 計算が合わない <
 ̄YYYYYYYY ̄
そんなバカなと思って、ロジックの見直しなど色々行ったのですが、最初のファイル以外計算が合わないのです。
まさかな~と思ってnkfでファイルの文字コードを調べたところ...
% nkf --guess data/test4.csv (git)-[master] CP932 (CRLF)
CP932という結果
さっきまでエラー出てなかったような...
上の方をおそるおそるスクロールすると
[19] pry(main)> csv_data = CSV.read("data/test4.csv", headers: true) ArgumentError: invalid byte sequence in UTF-8 from /usr/local/lib/ruby/2.5.0/csv.rb:2046:in `=~'
ちゃんと出てました。。。
完全に僕の確認不足で、横着してpry上でずっとテストしていたので、読み込みに成功したcsv_dataを参照したままプログラムを実行してましたorz
pryで粘る際は、定期的にresetコマンドを実行して、環境をクリーンにしましょう
ちなみに文字コードを考慮してcsvを開く場合はこちらです。
[76] pry(main)> csv_data = CSV.read("data/test4.csv", headers: true, encoding: "CP932:UTF-8") => #<CSV::Table mode:col_or_row row_count:1121>
みなさんもお気をつけください
ではでは~