web-dev-qa-db-ja.com

Ruby CSVを使用してエクスポートされたCSVのフィールドセパレータ/デリミタを変更する

デフォルトのフィールド区切り文字をカンマから他の文字に変更することは可能ですか、例えば'|'エクスポート用?

50
Vincent

代わりにタブを使用した例を次に示します。

ファイルへ:

CSV.open("myfile.csv", "w", {:col_sep => "\t"}) do |csv|
  csv << ["row", "of", "CSV", "data"]
  csv << ["another", "row"]
  # ...
end

文字列へ:

csv_string = CSV.generate(:col_sep => "\t") do |csv|
  csv << ["row", "of", "CSV", "data"]
  csv << ["another", "row"]
  # ...
end

CSVに関する現在のドキュメントは次のとおりです。 http://Ruby-doc.org/stdlib/libdoc/csv/rdoc/index.html

104
Dylan Markow

以前のCSVライブラリは、 FasterCSV in Ruby 1.9。

require "csv"

output = CSV.read("test.csv").map do |row|
  row.to_csv(:col_sep => "|")
end
puts output
7
Lri

CSV::Writer には、引数として区切り文字列を受け入れるgenerateメソッドがあります。

#!/usr/bin/env Ruby

# +++ Ruby 1.8 version +++

require "csv"

outfile = File.open('csvout', 'wb')
  CSV::Writer.generate(outfile, '|') do |csv|
    csv << ['c1', nil, '', '"', "\r\n", 'c2']
  end
outfile.close
4
miku