回答編集履歴
7
a
test
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
- [Hash#keysの順番は保証されるのか?](http://qiita.com/ongaeshi/items/a57b6ab166b3c4bc360d)
|
2
2
|
|
3
3
|
- [class CSV (Ruby 2.1.0)](http://docs.ruby-lang.org/ja/2.1.0/class/CSV.html)
|
4
|
+
|
5
|
+
- [Excelですぐ開けるUnicodeなCSVをRubyで生成する](http://d.akiroom.com/2014-01/excel-unicode-utf-csv-ruby/)
|
4
6
|
|
5
7
|
|
6
8
|
|
@@ -15,6 +17,8 @@
|
|
15
17
|
- 日本語がExcelで化けないように,先頭3バイトとしてBOMを付与しています.
|
16
18
|
|
17
19
|
- 日本語がMac版のExcelでも化けないように,文字コードはUTF-8ではなくUTF-16LEにしました.
|
20
|
+
|
21
|
+
- 一度文字列としてUTF-8のCSVを生成してからまとめて書き込んだほうがコード量は少なくなりますが,大量のデータを一度に書き込む際に困るため,逐次文字コードをUTF-16LEに変換しながら1行ずつ書き込んでいく書き方にしました.
|
18
22
|
|
19
23
|
|
20
24
|
|
6
a
test
CHANGED
@@ -10,7 +10,11 @@
|
|
10
10
|
|
11
11
|
- ハッシュのキーを文字列で定義する意味は薄いのでシンボル使いました.もしここが変更出来ない場合は`map`に使っているシンボルの配列に関しても,シンボルではなく文字列にしてください.
|
12
12
|
|
13
|
+
- Excelで一発で開けるように,コンマ区切りではなくタブ区切りにしました.
|
14
|
+
|
15
|
+
- 日本語がExcelで化けないように,先頭3バイトとしてBOMを付与しています.
|
16
|
+
|
13
|
-
- Mac版のExcelでも
|
17
|
+
- 日本語がMac版のExcelでも化けないように,文字コードはUTF-8ではなくUTF-16LEにしました.
|
14
18
|
|
15
19
|
|
16
20
|
|
@@ -24,9 +28,9 @@
|
|
24
28
|
|
25
29
|
birthday: '2016/05/28',
|
26
30
|
|
27
|
-
family_name: '
|
31
|
+
family_name: '佐々木',
|
28
32
|
|
29
|
-
last_name: '
|
33
|
+
last_name: '太郎',
|
30
34
|
|
31
35
|
}
|
32
36
|
|
@@ -62,9 +66,9 @@
|
|
62
66
|
|
63
67
|
birthday: '2016/05/28',
|
64
68
|
|
65
|
-
family_name: '
|
69
|
+
family_name: '佐々木',
|
66
70
|
|
67
|
-
last_name: '
|
71
|
+
last_name: '太郎',
|
68
72
|
|
69
73
|
}
|
70
74
|
|
@@ -86,4 +90,4 @@
|
|
86
90
|
|
87
91
|
|
88
92
|
|
89
|
-
ちなみにダブルクオーテーションに関してですが,文字列が改行
|
93
|
+
ちなみにダブルクオーテーションに関してですが,文字列が改行などを含んでいたりして**必要なときだけ括る**という処理になるかと思います.
|
5
UTF-16E対応
test
CHANGED
@@ -4,7 +4,13 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
+
全バージョン共通です.
|
8
|
+
|
9
|
+
|
10
|
+
|
7
|
-
|
11
|
+
- ハッシュのキーを文字列で定義する意味は薄いのでシンボル使いました.もしここが変更出来ない場合は`map`に使っているシンボルの配列に関しても,シンボルではなく文字列にしてください.
|
12
|
+
|
13
|
+
- Mac版のExcelでも開けるように文字コードはUTF-16LEにしました.
|
8
14
|
|
9
15
|
|
10
16
|
|
@@ -26,9 +32,15 @@
|
|
26
32
|
|
27
33
|
|
28
34
|
|
29
|
-
|
35
|
+
File.open('data.csv', 'wb:UTF-16LE') do |file|
|
30
36
|
|
37
|
+
file.write "\uFEFF"
|
38
|
+
|
39
|
+
CSV.open(file, 'wb:UTF-16LE', col_sep: "\t") do |csv|
|
40
|
+
|
31
|
-
csv << [:birthday, :family_name, :last_name].map{|k
|
41
|
+
csv << [:birthday, :family_name, :last_name].map{|k| hash[k].encode('UTF-16LE')}
|
42
|
+
|
43
|
+
end
|
32
44
|
|
33
45
|
end
|
34
46
|
|
@@ -58,9 +70,15 @@
|
|
58
70
|
|
59
71
|
|
60
72
|
|
61
|
-
|
73
|
+
File.open('data.csv', 'wb:UTF-16LE') do |file|
|
62
74
|
|
75
|
+
file.write "\uFEFF"
|
76
|
+
|
77
|
+
CSV.open(file, 'wb:UTF-16LE', col_sep: "\t") do |csv|
|
78
|
+
|
63
|
-
csv << hash.values
|
79
|
+
csv << hash.values.map{|v| v.encode('UTF-16LE')}
|
80
|
+
|
81
|
+
end
|
64
82
|
|
65
83
|
end
|
66
84
|
|
4
a
test
CHANGED
@@ -68,4 +68,4 @@
|
|
68
68
|
|
69
69
|
|
70
70
|
|
71
|
-
ちなみにダブルクオーテーションに関してですが,文字列が
|
71
|
+
ちなみにダブルクオーテーションに関してですが,文字列が改行や`,`を含んでいたりして**必要なときだけ括る**という処理になるかと思います.
|
3
a
test
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
-
全バージョン共通
|
7
|
+
全バージョン共通です.ハッシュのキーを文字列で定義する意味は薄いのでシンボル使いました.もしここが変更出来ない場合は`map`に使っているシンボルの配列に関しても,シンボルではなく文字列にしてください.
|
8
8
|
|
9
9
|
|
10
10
|
|
2
a
test
CHANGED
@@ -65,3 +65,7 @@
|
|
65
65
|
end
|
66
66
|
|
67
67
|
```
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
ちなみにダブルクオーテーションに関してですが,文字列が空白や改行を含んでいたりして**必要なときだけ括る**という処理になるかと思います.
|
1
a
test
CHANGED
@@ -9,6 +9,10 @@
|
|
9
9
|
|
10
10
|
|
11
11
|
```ruby
|
12
|
+
|
13
|
+
require 'csv'
|
14
|
+
|
15
|
+
|
12
16
|
|
13
17
|
hash = {
|
14
18
|
|
@@ -38,6 +42,10 @@
|
|
38
42
|
|
39
43
|
```ruby
|
40
44
|
|
45
|
+
require 'csv'
|
46
|
+
|
47
|
+
|
48
|
+
|
41
49
|
hash = {
|
42
50
|
|
43
51
|
birthday: '2016/05/28',
|