web-dev-qa-db-fra.com

convertir un tableau de hachages en fichier csv

Comment convertir un tableau de hachages en fichier .csv?

J'ai essayé

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

mais c'est vide

17
user1571609

Essaye ça:

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

Si vous voulez que la première ligne du fichier CSV contienne les clés du hachage (un peu comme un en-tête), faites simplement:

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

Veuillez lire le commentaire de @cgenco ci-dessous: Il a écrit un patch de singe pour la classe Array.

38
MrYoshiji

Si les hachages ne sont pas uniformes, vous vous retrouverez avec des données dans les mauvaises colonnes. Vous devriez plutôt utiliser 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
0
Ariel Cabib