我正在写一个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
答案 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"