8

私はこの2D配列を持っています:

arr = [[1,2],[3,4]]

私は通常、次のことを行います。

CSV.open(file) do |csv| 
  arr.each do |row| 
    csv << row
  end
end

行ごとに追加する以外に、簡単または直接的な方法はありますか?

4

2 に答える 2

10

配列が単なる数字 (コンマを含む可能性のある文字列ではない) であると仮定すると、次のようになります。

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

CSV ライブラリを使用せずに、1 つの巨大な文字列がディスクに書き込まれました。

または、CSV ライブラリを使用して各行を正しくエスケープします

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 } 

これを頻繁に行う必要があり、コードが気になる場合は、次のようにモンキーパッチを適用できます。

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)
于 2012-06-05T19:55:32.070 に答える