如何输出未知数量的项目

时间:2013-02-20 17:48:48

标签: ruby-on-rails ruby csv

如果我使用CSV gem将数据行输出到CSV文件,但每行存有未知数量的项目,存储在数组中,如何包含所有项目?

例如,对于第一行,我有一个固定单元格后跟X个数字项目,第一行可能是2,第二行可能是20。如果它总是2,我会这样做:

CSV.open('file.csv', 'a') do |csv|
   csv << ["#{Some_text}","#{cell2}","#{cell3}"]
end

但是,如何在需要时才包含更多内容?

2 个答案:

答案 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运算符(*)可能会为您提供所需的灵活性。

此致