2013-03-24 2 views
2

Я хотел бы сгенерировать csv-файл из массивов отдельных массивов. Это мой код:Ruby Запись в CSV-файле по столбцам из массивов?

require 'csv' 
CSV.open("csvfile.csv", "ab") do |csv| 
csv << [array1] 
csv << [array2] 
csv << [array3] 
end 

я нужен этот формат вывода:

array1,array2,array3 
array1,array2,array3 
array1,array2,array3 
array1,array2,array3 
array1,array2,array3 

Thx для вас помощь

ответ

4

По вашему сообщению, вы имели в виду, что массив1 array2, array3 хранит значения из 3 столбцов таблицы, а индекс строки определяется индексом значений в этих массивах? Вы можете сначала группировать столбцы вместе, сделать transpose на 2-мерном массиве, а затем записать в файл CSV подряд за строкой.

require 'csv' 
table = [array1, array2, array3].transpose 
CSV.open('csvfile.csv', 'ab') do |csv| 
    table.each do |row| 
     csv << row 
    end 
end 

Вы получите файл CSV, как это:

array1[0], array2[0], array3[0] 
array1[1], array2[1], array3[1] 
array1[2], array2[2], array3[2] 
... 
+0

Да, это то, что я хотел сделать. Отлично! Большое спасибо! – indi

1

Enumerable#zip является наиболее распространенным методом параллельного обхода нескольких коллекций.

require 'csv' 

CSV.open('csvfile.csv', 'ab') do |csv| 
    array1.zip(array2,array3) { |row| csv << row } 
end