web-dev-qa-db-ja.com

ハッシュの配列をcsvファイルに変換

ハッシュの配列を.csvファイルに変換するにはどうすればよいですか?

私が試してみました

    CSV.open("data.csv", "wb") do |csv|
      @data.to_csv
    end

しかし、それは空白です

21
user1571609

これを試して:

CSV.open("data.csv", "wb") do |csv|
  @data.each do |hash|
    csv << hash.values
  end
end

CSVの最初の行にハッシュのキー(ヘッダーのようなもの)を含めるには、次のようにします。

CSV.open("data.csv", "wb") do |csv|
  csv << @data.first.keys # adds the attributes name on the first line
  @data.each do |hash|
    csv << hash.values
  end
end

以下の@cgencoのコメントを読んでください。彼はArrayクラス用のモンキーパッチを書きました。

45
MrYoshiji

ハッシュが均一でない場合は、誤った列にデータが含まれることになります。代わりにvalues_atを使用する必要があります。

CSV.open("data.csv", "wb") do |csv|
  keys = @data.first.keys
  csv << keys
  @data.each do |hash|
    csv << hash.values_at(*keys)
  end
end
3
Ariel Cabib

CSVは、不均一なハッシュを処理するのに十分スマートです。 CSV :: Writer#<< のコードを参照してください

したがって、これは機能し、上記の例よりも少し単純です。

CSV.open("data.csv", "wb", {headers: @data.first.keys} ) do |csv|
  @data.each do |hash|
    csv << hash
  end
end
3
nbrustein