4

CSV ファイルを作成していて、不要なCSV.dump2 つのヘッダー行を出力しています。

設定を試み: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
4

2 に答える 2

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
于 2013-01-29T01:51:53.487 に答える
0

問題は次の 2 点だと思います。

CSV.dump [a]

構造体のインスタンスをa配列でラップし、CSV がマーシャリングを試みます。これは便利な場合もありますが、CSV を認識する他の Ruby 以外のアプリで使用するために CSV ファイルを生成しようとすると、使用できない値になってしまいます。出力を見ると、CSV ではありません。

クラス、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"
于 2013-01-29T03:10:42.960 に答える