如何在编写CSV时跳过标题?

时间:2013-01-29 00:43:24

标签: ruby csv

我正在写一个CSV文件,CSV.dump输出两个我不想要的标题行。

我尝试设置:write_headers => false,但仍会输出标题:

irb> A = Struct.new(:a, :b)
=> A
irb> a = A.new(1,2)
=> #<struct A a=1, b=2>
irb> require 'csv'
=> true
irb> puts CSV.dump [a], '', :write_headers => false, :headers=>false
class,A
a=,b=
1,2

2 个答案:

答案 0 :(得分:1)

我认为你不能用选项参数来做。但是你可以通过不使用generate方法轻松完成你想要的东西

irb> arr = [a, a]
=> [#<struct A a=1, b=2>, #<struct A a=1, b=2>]
irb> csv_string = CSV.generate do |csv|
irb*   arr.each {|a| csv << a}
irb> end
irb> puts csv_string
1,2
1,2
=> nil

答案 1 :(得分:0)

我认为这个问题有两个方面:

CSV.dump [a]

将一个struct a的实例包装在一个数组中,然后CSV尝试编组。虽然这可能有时很有用,但在尝试生成CSV文件以供其他识别CSV的非Ruby应用程序使用时,您最终会得到无法使用的值。查看输出,它不是CSV:

class,A
a=,b=
1,2

在IRB中查看:

=> "class,A\na=,b=\n1,2\n"
再次,它不会像电子表格或数据库那样被接受。所以,需要另一种策略。

a删除数组无济于事:

CSV.dump a
=> "class,Fixnum\n\n\n\n"

以不同的方式开始,我研究了从数组生成CSV的标准方法:

puts a.to_a.to_csv
=> 1,2

创建它的另一种方法是:

CSV.generate do |csv|
  csv << a.to_a
end
=> "1,2\n"