Tuesday, September 04, 2012

RubyでCSVをエスケープして出力

改行を含んだりするカラムがあるCSVを出力するとき、全てのカラムを""で囲んで出力するには:force_quotesオプションを使う。
CSV.open(filepath, "w", :force_quotes => true) do |csv_writer|
  csv_writer << ["出力する文字列"]
end
カラムごとに出力フォーマットを変更する場合は、convertersオプションを利用する。例えば2番目のカラムをテキスト形式で出力する場合は:
converter = ->(field, field_info) {
  case field_info.index
  when 1
    CSV::Converters[:text].call(field, field_info)
  else
    field
  end
}
CSV.open(filepath, "w", :converters => converter) do |csv_writer|
  csv_writer << [1, "出力する文字列"]
end
ここではCSVクラスにデフォルトで用意されているCSV::Convertersにある、文字列用のコンバーターを利用している。

No comments: