Skip to content

Instantly share code, notes, and snippets.

@jloosfelt
Created March 20, 2013 15:44
Show Gist options
  • Save jloosfelt/5205745 to your computer and use it in GitHub Desktop.
Save jloosfelt/5205745 to your computer and use it in GitHub Desktop.
Import Csv
require 'csv'
# colonnes du fichier
keys = [:reference, :name, :trade, :origin, :size, :category, :packaging, :unit, :weight, :price, :employee, :store]
count=0 # nombre d'import avec succès
i=0
puts "Suppression des anciennes références - #{DateTime.now}"
# ici ma classe c'était Item. La transaction permet d'annuler le delete_all en cas de crash.
# ça me semble être une bonne idée.
Item.transaction do # Item = ma classe
Item.delete_all
# note : j'utilisais SettingsLogic, le path du fichier est définit dans les Settings.
FasterCSV.foreach(Settings.import_products_path, {:col_sep => "\t", :row_sep => "\n"}) do |row|
i+=1
hashed_row = row.to_h(keys) # transforme le tableau de valeurs en hash {nom_colonne: value, ...}
item = Item.new(hashed_row)
# si pays = fr, ajouter le test sur les CEDEX (cp.ends_with?("CEDEX"))
if item.save
count+=1
else
# ici c'était dans le contexte d'une tâche rake, utiliser plutôt le logger?
puts "ligne #{i}, erreur : #{item.errors.full_messages}"
end
end
puts "#{count} produits insérés"
end
# créer lib/array.rb avec ce contenu (pour enrichir la classe Array de 'to_h')
class Array
def to_h(keys)
Hash[*keys.zip(self).flatten]
end
end
# dans application.rb, ajouter
require 'array'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment