J'ai un fichier qui ressemble à ce Ces valeurs sont délimitées et, à partir de ceci, je veux l'analyser à Ruby et la mettre dans ma base de données. p> J'ai essayé le suivant p> mais Il ne prend pas non plus en compte que la première ligne est un en-tête. p> Comment puis-je analyser un fichier délimité à partir de onglet et comment Je dis que la première ligne est une en-tête? P> P> @stuff code> vient de retourner tout l'objet entier et ne semble pas utiliser le séparateur de colonne I spécifié. p>
3 Réponses :
J'ai eu le succès avec FasterCSV et Ruby 1.8.7, je pense que c'est maintenant la bibliothèque CSV Core CSV en 1.9, en utilisant ceci:
table = FasterCSV.read(result_file.to_file.path, { :headers => true, :col_sep => "\t", :skip_blanks => true })
unless table.empty?
header_arry = Array.new
table.headers.each do |h|
#your header logic, e.g.
# if h.downcase.include? 'pos'
# header_arry << 'position'
# end
# simplest case here
header_arry << h.downcase
#which produces an array of column names called header_arry
end
rows = table.to_a
rows.delete_at(0)
rows.each do |row|
#convert to hash using the column names
hash = Hash[header_arry.zip(row)]
# do something with the row hash
end
end
"Variable locale indéfinie ou méthode` Header_arry '"- Le fichier texte n'a pas l'en-tête défini de manière particulière, je ne pense pas ... désolé je suis très nouveau aux rails
J'ai ajouté un peu plus d'explications dans la section d'en-tête. Afaik il utilise juste la première rangée, rien n'a besoin de définir comme Haeder
Consultez le gem "Smarter_csv" https://github.com/tilo/smarter_csv/ ; Il a quelques fonctionnalités intéressantes pour créer des hachages à partir de données CSV. P>
Voici comment je le ferais (le long de la façon dont je convertis les "tableaux de tableaux" qui sont retournés par CSV.Read ou CSV.PARSE, dans "Tableaux de hachage" ... Cela permet aux données des données, et il est un peu plus facile à traiter de cette façon. P>
csv_data.each do |hash| # ... end
Découvrez le gem 'smarter_csv' - il a quelques options intéressantes!
J'ai utilisé un moyen simple d'analyser les données CSV. Ici, les délimiteurs sont l'onglet, l'espace, la virgule ou le point-virgule. Il renvoie une gamme de champs.
row_data = File.new("your_file.csv").read
row_data = row_data.split(/[ ,;\s]/).reject(&:empty?)
Merci, coïncidence: col_sep => "\ t" a sauvé ma journée: D