rubyでCSVファイルのデータ集計をやりたい。
グループ分けするのにDBにぶっ込んでSQLやれば簡単なんだが、ここ見てCSVライブラリに感動したんで挑戦中。
というかSQLも無しにベタな条件分岐でプログラム作ってれば、サクッと終わってた気もする。
あ~時間ないのに。というかこういう時に限って横道にそれちゃう悪いクセ。
んで、CSV.tablesすげえなと思って試したら、ヘッダ部分(CSVファイル1行目)に漢字が使われてたらシンボル化が失敗するようで全て:""になって使いものにならない。
ググると「漢字だったら使えないからreadメソッド使おう」みたいで、そうするtable[:"項目1"]みたいにできないのでは?と思い、何とか対処策発見。
tbl=CSV.table("test.csv", header_converters: nil)
ヘッダをシンボルへコンバートしない指定ができるじゃん。
これで次のようにやれば項目1でグループ化できる。
grp=table.group_by{|row| row["項目1"]}
でも標準のgroup_byじゃ簡単にはいかないようだ・・・
それと結局tableメソッドとreadメソッドは同じらしいし、漢字変換も必要なので
tbl=CSV.read("test.csv", headers: true, encoding: "EUC-JP:UTF-8")
にしたという・・・
グループ分けするのにDBにぶっ込んでSQLやれば簡単なんだが、ここ見てCSVライブラリに感動したんで挑戦中。
というかSQLも無しにベタな条件分岐でプログラム作ってれば、サクッと終わってた気もする。
あ~時間ないのに。というかこういう時に限って横道にそれちゃう悪いクセ。
んで、CSV.tablesすげえなと思って試したら、ヘッダ部分(CSVファイル1行目)に漢字が使われてたらシンボル化が失敗するようで全て:""になって使いものにならない。
ググると「漢字だったら使えないからreadメソッド使おう」みたいで、そうするtable[:"項目1"]みたいにできないのでは?と思い、何とか対処策発見。
tbl=CSV.table("test.csv", header_converters: nil)
ヘッダをシンボルへコンバートしない指定ができるじゃん。
これで次のようにやれば項目1でグループ化できる。
grp=table.group_by{|row| row["項目1"]}
でも標準のgroup_byじゃ簡単にはいかないようだ・・・
それと結局tableメソッドとreadメソッドは同じらしいし、漢字変換も必要なので
tbl=CSV.read("test.csv", headers: true, encoding: "EUC-JP:UTF-8")
にしたという・・・
※コメント投稿者のブログIDはブログ作成者のみに通知されます