2010-02-15 13 views
0

J'ai actuellement le code suivant pour analyser un fichier csv en utilisant la bibliothèque standard csvRuby on Rails en mouvement de CSV FasterCSV

@parsed_file=CSV::Reader.parse(params[:dump][:file]) 
@parsed_file.each do |row| 
#some code 
end 

Je veux déplacer cela csv plus rapide pour la vitesse accrue. Est-ce que quelqu'un sait l'équivalent de ce qui précède pour FasterCSV?

Merci

Répondre

2
CSV::Reader.parse(File.open('file.csv')){|row| puts row} 
or 
CSV::Reader.parse("some, content\nanother, content"){|row| puts row} 

et

FasterCSV.parse(File.open('file.csv')){|row| puts row} 
or 
FasterCSV.parse("some, content\nanother, content"){|row| puts row} 

sont équivalentes.

Mais

FasterCSV.read('filename') 

prend le nom de fichier en tant que paramètre et lit et analyser les données à partir du fichier mais vous transférons le contenu du fichier que vous transmettez des données dans le paramètre

@parsed_file = FasterCSV.parse(params[:dump][:file]) 
@parsed_file.each do |row| 
    puts row 
    # and do some operations 
end 

devrait fonctionner correctement.

1

Pour le faire avec un chemin de fichier (comme vous semblez être):

FasterCSV.read(params[:dump][:file]) 

Vous pouvez vérifier les FasterCSV docs pour d'autres façons de le faire (par exemple, traiter chaque ligne comme il est analysé, ou lu à partir d'une chaîne au lieu d'un fichier).

+0

Obtenir un fichier temporaire impossible à convertir en erreur de chaîne – Splashlin