如果我使用 CSV gem 将数据行输出到 CSV 文件,但每行的项目数量未知,存储在数组中,如何包含所有项目?
例如,对于第一行,我有一个固定单元格,后跟 X 个项目,第一行可能是 2,但第二行可能是 20。如果总是 2 我会这样做:
CSV.open('file.csv', 'a') do |csv|
csv << ["#{Some_text}","#{cell2}","#{cell3}"]
end
但是我怎样才能仅在需要时才包含更多内容?
如果我使用 CSV gem 将数据行输出到 CSV 文件,但每行的项目数量未知,存储在数组中,如何包含所有项目?
例如,对于第一行,我有一个固定单元格,后跟 X 个项目,第一行可能是 2,但第二行可能是 20。如果总是 2 我会这样做:
CSV.open('file.csv', 'a') do |csv|
csv << ["#{Some_text}","#{cell2}","#{cell3}"]
end
但是我怎样才能仅在需要时才包含更多内容?
由于该<<
方法需要一个数组,因此您可以构建任意数量的列,并使用简单的数组数学将它们传递:
CSV.open('file.csv', 'a') do |csv|
csv << [ 'Fixed cell' ] + [ 1, 2, 3 ]
csv << [ 'Fixed cell' ] + [ 1, 2, 3, 4, 5, 6, 7 ]
csv << [ 'Fixed cell' ] + other_array
end
可以使用 . 将多个数组组合成一个奇异数组+
。这些数组的长度没有固有的限制,并且 CSV 中没有要求所有行具有相同的列数。
"#{var}"
请注意,说而不是简单地说几乎总是多余的var
。
You could also do:
*cells = cell1,cell2,celln # You can add as many as you need
CSV.open('file.csv', 'a') do |csv|
csv << [ 'Fixed cell' ] + cells
end
The splat operator(*) might give you the flexibility you're looking for.
Regards,