2012-06-05 5 views
7

私は、この2次元配列があります。2D配列を直接CSVファイルにダンプするにはどうすればいいですか?

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

を私は通常の操作を行います。

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

は、行ごとの追加以外にそれを行うのいずれかより簡単または直接的な方法はありますか?

+0

も参照してください:http://stackoverflow.com/questions/4822422/output-array-to-csv-in-ruby – Phrogz

+1

あなたが持っているものは、すでにかなりあなたがプログラマにとって簡単です。一度に1つずつ行を追加するパフォーマンスが心配ですか? – Phrogz

+0

@Phrogzいいえ私はパフォーマンスについて心配していません。私は人生をもっと楽にしたいと思っていますが、私が使うことができるものがあるかどうか、あるいは自分でそれをしなければならないかどうかは分かりません。 – texasbruce

答えて

10

あなたの配列は、その後、数字だけ(潜在的にそれらの中にカンマを持っていない文字列)であると仮定すると:

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

一つの巨大な文字列が無いCSVライブラリを含むと、ディスクにblatted。

また

、CSVライブラリを使用してcorrectly escape each rowへ:

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) 
+0

あらかじめ定義された方法はありませんか?私は猿のパッチを作成します。 – texasbruce

+0

@ texasbruceドキュメントのあなたの読書は私のものと同じくらい良いです。私は1つを見ません。あなたは? – Phrogz

+0

私は自分自身を作った... – texasbruce

0

は、上記の答えを拡張する:あなたは、多くの場合、これをしなければならないと、コードがあなたを気にした場合、あなたはそれをモンキーパッチでき

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 } 

@Phrogzによって、csvライブラリを使用し、デフォルトの区切り文字を変更する必要があります。

File.open(file,'w'){ |f| f << arr.map{|x| x.to_csv(col_sep: '|')}.join } 
関連する問題