📘
WIP Ruby で CSV の項目をすべてダブルクオートで囲むようにする
Ruby の csv
ライブラリでは以下の条件に当てはまる場合に要素が ""
で囲まれるようになっています。
-
"
が含まれている場合 -
,
が含まれている場合 -
\n
が含まれている場合 -
空文字列
の場合
require "csv"
require "stringio"
output = StringIO.new
csv = CSV.new(output)
# これは "" で囲まれない
csv << [42, "mami", nil, 3.14]
# これは "" で囲まれる
csv << ["homu,mami", 'mado"', "", "mami\nmado"]
puts output.string
42,mami,,3.14
"homu,mami","mado""","","mami
mado"
このあたりは CSV の規格である rfc4180 に準じる形になっているみたいですね。
""
で囲むようにする
強制的に Ruby の csv
ライブラリだと force_quotes:
オプションですべての要素を ""
でくくるようにすることができます。
require "csv"
require "stringio"
output = StringIO.new
csv = CSV.new(output, force_quotes: true)
# これも "" でくくられるようになる
csv << [42, "mami", nil, 3.14]
csv << ["homu,mami", 'mado"', "", "mami\nmado"]
puts output.string
"42","mami","","3.14"
"homu,mami","mado""","","mami
mado"
""
の有無を区別したくないような場合に便利です。
ちなみに ""
の文字は quote_char
で指定できたりもします。
require "csv"
require "stringio"
output = StringIO.new
csv = CSV.new(output, quote_char: "'")
# 'mado 以外は '' でくくられるようになる
csv << ["homu,mami", 'mado"', "", "mami\nmado"]
puts output.string
'homu,mami',mado",'','mami
mado'
この場合は "
が含まれていても '
でくくられないのでご注意を。
Discussion