68

Is it possible to change the default field separator from comma to to some other character, e.g '|' for exporting?

Vincent
  • 16,086
  • 18
  • 67
  • 73

3 Answers3

130

Here's an example using a tab instead.

To a file:

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

To a string:

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

Here's the current documentation on CSV: http://ruby-doc.org/stdlib/libdoc/csv/rdoc/index.html

Dylan Markow
  • 123,080
  • 26
  • 284
  • 201
10

The previous CSV library was replaced with FasterCSV in Ruby 1.9.

require "csv"

output = CSV.read("test.csv").map do |row|
  row.to_csv(:col_sep => "|")
end
puts output
Lri
  • 26,768
  • 8
  • 84
  • 82
5

CSV::Writer has a generate method, which accepts a separator string as argument.

#!/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
miku
  • 181,842
  • 47
  • 306
  • 310