全バージョン共通です.
- ハッシュのキーを文字列で定義する意味は薄いのでシンボル使いました.もしここが変更出来ない場合は
map
に使っているシンボルの配列に関しても,シンボルではなく文字列にしてください.
- Excelで一発で開けるように,コンマ区切りではなくタブ区切りにしました.
- 日本語がExcelで化けないように,先頭3バイトとしてBOMを付与しています.
- 日本語がMac版のExcelでも化けないように,文字コードはUTF-8ではなくUTF-16LEにしました.
- 一度文字列としてUTF-8のCSVを生成してからまとめて書き込んだほうがコード量は少なくなりますが,大量のデータを一度に書き込む際に困るため,逐次文字コードをUTF-16LEに変換しながら1行ずつ書き込んでいく書き方にしました.
ruby
1require 'csv'
2
3hash = {
4 birthday: '2016/05/28',
5 family_name: '佐々木',
6 last_name: '太郎',
7}
8
9File.open('data.csv', 'wb:UTF-16LE') do |file|
10 file.write "\uFEFF"
11 CSV.open(file, 'wb:UTF-16LE', col_sep: "\t") do |csv|
12 csv << [:birthday, :family_name, :last_name].map{|k| hash[k].encode('UTF-16LE')}
13 end
14end
Ruby1.9からはこちらでもいいです.分かりにくいのであまりおすすめはしませんが
ruby
1require 'csv'
2
3hash = {
4 birthday: '2016/05/28',
5 family_name: '佐々木',
6 last_name: '太郎',
7}
8
9File.open('data.csv', 'wb:UTF-16LE') do |file|
10 file.write "\uFEFF"
11 CSV.open(file, 'wb:UTF-16LE', col_sep: "\t") do |csv|
12 csv << hash.values.map{|v| v.encode('UTF-16LE')}
13 end
14end
ちなみにダブルクオーテーションに関してですが,文字列が改行などを含んでいたりして必要なときだけ括るという処理になるかと思います.
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/30 03:24