2016-12-22 1 views
0

Je suis en vrac d'importation de données à partir d'un fichier CSV dans la base de données en utilisant Active record Import gem. Mais je veux sauter quelques colonnes CSV lors de l'importation.Ruby CSV | Comment sauter quelques colonnes en lisant CSV?

Par exemple, mon fichier xaa.csv comporte des en-têtes tels que name, author, author_id, rating. Lors de l'importation, je souhaite ignorer les valeurs de la colonne 'author_id' et importer toutes les autres colonnes.

books = CSV.read("/public/xaa.csv") //What more should I do here to skip the 3rd column 
columns = [:name, :author, :rating] 
Book.import columns, books, :validate => false 
+1

Qu'avez-vous essayé? Avez-vous regardé l'option d'en-têtes? Lisez les en-têtes et vous pouvez ensuite importer sélectivement chaque ligne en fonction de la colonne. Je le fais tout le temps – MageeWorld

+0

essayer ceci 'columns = [: nom,: auteur, nil,: rating]' – sa77

Répondre

4
books = [] 

CSV.foreach('/public/xaa.csv', headers: true) do |row| 
    books << [row['name'], row['author'], row['rating']] 
end 

columns = [:name, :author, :rating] 
Book.import(columns, books, validate: false) 
+0

Ceci est fonctionnellement pas différent du code original. Pour l'exigence "comment sauter la 3ème colonne", vous devez définir row ['rating'] = nil, ou remplacer zéro dans la 3ème position dans les livres << ligne – whodini9

+0

Merci @vegetaras. – Mahendhar

0
books = CSV.readlines(path, headers:true).map{|row| row.values_at('name','rating') } 

version de vegetaras est légèrement plus efficace mémoire.