7
votes

Comment générer un hachage à une ligne CSV

Je voudrais mapper un hachage à une ligne CSV.

J'ai quelques objets dans un hachage: p> xxx pré>

Je veux transformer cela en Un fichier CSV avec les touches telles que les colonnes et les valeurs de chaque ligne. P>

Je peux facilement créer les en-têtes en créant un CSV :: rangée code> comme ceci: p> xxx pré>

Je ne peux pas compter sur la commande et plus importants, toutes les valeurs ne sont pas remplies tout le temps. p>

mais quand j'essaie maintenant d'ajouter des lignes à la table via et matrice, la cartographie des en-têtes est ignorée. Il doit être dans le bon ordre. P>

Pour démontrer cela, j'ai écrit ce petit script: p> xxx pré>

Je m'attendrais à ce résultat: P > xxx pré>

au contraire les valeurs dans la commande comme elles apparaissent. Donc, la sortie est la suivante: p>

puts "favorite_bands: #{t['favorite_band']}"
> favorite_bands: [nil, "Backstreet Boys", nil]


0 commentaires

3 Réponses :


5
votes

Vous pouvez simplement itérer sur les noms de colonne xxx


4 commentaires

cela ne résoudra pas le problème. La commande est toujours imprévisible et les valeurs nules sont ignorées.


La commande serait exactement comme définie dans all_keys_as_array


Vous pouvez résoudre le problème de la valeur nul en ajoutant quelque chose comme personne [clé]? personne [clé]: ''


Je ne pense pas que la commande soit imprévisible avec la solution de @ Benjaminudinktencate, ce sera l'ordre du tableau des clés qui est exactement ce que vous voulez si je reçois ce droit.



3
votes

Vous pouvez simplement utiliser #to_csv et distribuer avec tous les CSV :: ligne et CSV :: Table Stuff: < Pré> xxx


1 commentaires

Bien, mais vous vous manquez sur tout le sucre de CSV en utilisant fichier . Essayez csv.open et f << têtes à la place.



5
votes

Les suggestions actuelles fonctionnent, alors merci pour cela.

Cependant, je suis tombé sur une solution plus élégante en utilisant csv :: rangée # champs .

alors je peux simplement convertir la ligne CSV en Le tableau correct avant de l'ajouter à la table: xxx


2 commentaires

Où dans votre script de démonstration est utilisé? Je ne peux pas obtenir ça pour travailler.


Vous remplacez «T << R» avec la ligne que j'ai mentionnée, elle convertira la ligne en une matrice dans le bon ordre. Je viens de le tester à nouveau et ça marche.