2009-11-02 3 views
0

J'essaie d'obtenir la configuration de fastercsv de sorte que plutôt que d'analyser chaque ligne, chaque colonne sera placée dans un tableau multiple.FasterCSV: colonnes dans un tableau - rails

CSV import file: 
id, first name, last name, age 
1, joe, smith, 11 
2, jane, doe, 14 

Save to array named people: 
people[0][0] would equal id 
people[2][1] would equal jane 

C'est ce que j'ai actuellement:

url = 'http://url.com/file.csv' 
open(url) do |f| 
    f.each_line do |line| 
    FasterCSV.parse(line) do |row| 
     row 
    end 
    end 
end 

Toute aide est appréciée.

+0

Pourquoi un tableau multidimensionnel? Quel est le problème avec un tableau de hachages qui est beaucoup plus agréable à lire. –

+0

Je voulais une configuration de tableau multidimensionnelle pour chaque colonne car je n'ai pas besoin de stocker les données dans l'enregistrement actif, je ne sais pas ce que seront les noms de colonnes, je veux prendre le tableau et compiler un fichier xml – Jeffrey

Répondre

0

Merci EMFI, avec votre aide, j'ai pu venir avec une solution.

Cela prend un fichier csv d'URL distant et le charge dans un tableau multidimensionnel, basé sur des colonnes.

require 'rio' 
require 'fastercsv' 

url = 'http://remoteurl.com/file.csv' 
people = FasterCSV.parse(rio(url).read) 
3

Avez-vous lu le FasterCSV documentation?

Si vous avez fait, vous sauriez que la meilleure façon de faire ce que vous voulez est:

people = FasterCSV.read('http://url.com/file.csv') 
+0

Impossible d'obtenir une URL à ouvrir dans FasterCSV.read – Jeffrey

+0

Également essayé de lire un fichier local et j'ai reçu une erreur de compilation: " liste des nombres impairs pour Hash " – Jeffrey

+0

La liste des nombres impairs pour le hachage ne devrait pas avoir de rapport avec FasterCSV. Y a-t-il une chance que vous utilisiez des accolades pour bookend vos blocs if? – EmFi

0

Vous pouvez utiliser CsvMapper au-dessus de FasterCSV Il est un économiseur vie

Questions connexes