Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何在编写CSV时跳过标题?_Ruby_Csv - Fatal编程技术网

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

Ruby 如何在编写CSV时跳过标题?,ruby,csv,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 =>

我正在写一个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
irb>A=Struct.new(:A,:b)
=>A
irb>a=a.新(1,2)
=> #
irb>需要“csv”
=>正确
irb>放置CSV.dump[a],'',:write_headers=>false,:headers=>false
A班
a=,b=
1,2

我认为您无法使用选项参数来实现。但是,不使用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
irb>arr=[a,a]
=> [#, #]
irb>csv_string=csv.generate do|csv|
irb*arr.each{a}csv结束
irb>puts csv_字符串
1,2
1,2
=>零

我认为问题有两个方面:

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

class,A a=,b= 1,2 同样,电子表格或数据库之类的东西也不会接受这一点。因此,需要另一种策略

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"
CSV.generate do | CSV|
csv“1,2\n”

在这种情况下,这是一个错误,因为文档中说:write_headers:false应该跳过headers
CSV.generate do |csv|
  csv << a.to_a
end
=> "1,2\n"