如果我使用CSV gem将数据行输出到CSV文件,但每行存有未知数量的项目,存储在数组中,如何包含所有项目?
例如,对于第一行,我有一个固定单元格后跟X个数字项目,第一行可能是2,第二行可能是20。如果它总是2,我会这样做:
CSV.open('file.csv', 'a') do |csv|
csv << ["#{Some_text}","#{cell2}","#{cell3}"]
end
但是,如何在需要时才包含更多内容?
答案 0 :(得分:4)
由于<<
方法采用数组,您可以根据需要构造任意数量的列,并使用简单数组数学传递它们:
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
几乎总是多余的。
答案 1 :(得分:0)
你也可以这样做:
*cells = cell1,cell2,celln # You can add as many as you need
CSV.open('file.csv', 'a') do |csv|
csv << [ 'Fixed cell' ] + cells
end
splat运算符(*)可能会为您提供所需的灵活性。
此致