मैं यह सिर्फ एक लाइन के लिए नीचे मिल गया है।
rows = [['a1', 'a2', 'a3'],['b1', 'b2', 'b3', 'b4'], ['c1', 'c2', 'c3'], ... ]
csv_str = rows.inject([]) { |csv, row| csv << CSV.generate_line(row) }.join("")
#=> "a1,a2,a3\nb1,b2,b3\nc1,c2,c3\n"
उपरोक्त सभी करें और एक पंक्ति में एक csv पर सहेजें।
File.open("ss.csv", "w") {|f| f.write(rows.inject([]) { |csv, row| csv << CSV.generate_line(row) }.join(""))}
ध्यान दें:
एक सक्रिय रिकॉर्ड डेटाबेस को सीएसवी में बदलने के लिए कुछ ऐसा होगा जैसा मुझे लगता है
CSV.open(fn, 'w') do |csv|
csv << Model.column_names
Model.where(query).each do |m|
csv << m.attributes.values
end
end
Hmm @tamouse, कि gist csv स्रोत को पढ़े बिना मुझे कुछ भ्रमित कर रहा है, लेकिन उदारता से, आपके सरणी में प्रत्येक हैश को k / v युग्मों की संख्या समान है और यह कि कुंजियाँ हमेशा समान होती हैं, उसी क्रम में (अर्थात यदि आपका डेटा संरचित है), तो यह काम करना चाहिए:
rowid = 0
CSV.open(fn, 'w') do |csv|
hsh_ary.each do |hsh|
rowid += 1
if rowid == 1
csv << hsh.keys# adding header row (column labels)
else
csv << hsh.values
end# of if/else inside hsh
end# of hsh's (rows)
end# of csv open
यदि आपका डेटा संरचित नहीं है, तो यह स्पष्ट रूप से काम नहीं करेगा