How to dump a 2D array directly into a CSV file?

csv, ruby

Solution

Assuming that your array is just numbers (no strings that potentially have commas in them) then:

File.open(file,'w'){ |f| f << arr.map{ |row| row.join(',') }.join('\n') }

One enormous string blatted to disk, with no involving the CSV library.

Alternatively, using the CSV library to correctly escape each row:

require 'csv'
# #to_csv automatically appends '\n', so we don't need it in #join
File.open(file,'w'){ |f| f << arr.map(&:to_csv).join } 

If you have to do this often and the code bothers you, you could monkeypatch it in:

class CSV
  def self.dump_array(array,path,mode="rb",opts={})
    open(path,mode,opts){ |csv| array.each{ |row| csv << row } }
  end
end
CSV.dump_array(arr,file)

Problem

I have this 2D array: ``` arr = [[1,2],[3,4]] ``` I usually do: ``` CSV.open(file) do |csv| arr.each do |row| csv << row end end ``` Is there any easier or direct way of doing it other than adding row by row?

Original source

Related problems