5 votes

Comment ignorer les trois premières lignes au lieu de seulement la première dans FasterCSV

Je utilise FasterCSV et je fais une boucle avec un foreach comme ceci

FasterCSV.foreach("#{Rails.public_path}/uploads/transfer.csv", :encoding => 'u', :headers => :first_row) do |row|

mais le problème est que mon csv a les 3 premières lignes comme entêtes...y a-t-il un moyen de faire en sorte que fasterCSV saute les trois premières lignes plutôt que seulement la première ?

19voto

Mladen Jablanović Points 22082

Je ne suis pas sûr de FasterCSV, mais dans la bibliothèque CSV standard de Ruby 1.9 (qui est faite à partir de FasterCSV), je peux faire quelque chose comme :

c = CSV.open '/chemin/vers/mon.csv'
c.drop(3).each do |row|
  # faire ce que vous voulez avec la ligne
end

5voto

Joaquim Rendeiro Points 1132

Je ne suis pas un utilisateur de FasterCSV, mais pourquoi ne pas faire le contrôle vous-même :

additional_rows_to_skip = 2
FasterCSV.foreach("...", :encoding => 'u', :headers => :first_row) do |row|
    if additional_rows_to_skip > 0
        additional_rows_to_skip -= 1
    else
        # do stuff...
    end
end

0voto

baash05 Points 1554

Merci à Mladen Jablanovic. J'ai eu mon indice.. Mais j'ai réalisé quelque chose d'intéressant En 1.9, la lecture semble se faire à partir de POS. En cela, je veux dire que si vous faites

c = CSV.open iFileName
logger.debug c.first
logger.debug c.first
logger.debug c.first

Vous obtiendrez trois résultats différents dans votre journal. Un pour chacune des trois lignes d'en-tête.
c.each do |row| #maintenant semble commencer à la 4e ligne.

Il est logique qu'il lise le fichier de cette manière. Ensuite, il n'aurait qu'à avoir la ligne actuelle en mémoire.

J'aime toujours la réponse de Mladen Jablanović, mais c'est aussi un aspect intéressant de la logique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X