Lire un fichier CSV récupéré depuis un formulaire

20 juillet 2007, 10:05

Voilà je suis en stage chez Dexem pour qui je développe Pagecreator (outil de création de Services Vocaux Interactifs en VXML). En ce moment je travaille sur une version dans laquelle on veut pouvoir importer un fichier CSV depuis un formulaire. Voici donc comment le faire avec Ruby on Rails.

Pour récupérer un fichier depuis un formulaire, il suffit de deux choses, une déclaration du formulaire adéquate et le champ qui va permettre de récupérer le fichier:

<%= start_form_tag({:action => 'import_csv', :id => my_object}, :multipart => true) %>
  <label for="csv_file">File to Upload</label>
  <%= file_field_tag "csv_file" %>
<%= end_form_tag %>

Ensuite dans l’action import_csv de votre controller, pour parser le fichier CSV et l’importer vers la base de données, il suffit de faire:

def import_csv
  begin
    CSV::Reader.parse(params[:csv_file]).each do |row|
      unless row[0].nil? or row[1].nil?
        MyObject.create(:name => row[0], :value => row[1])
      end
    end
  rescue
    flash[:error] = "There was an error parsing your CSV file"
  end
end

Capturer les exceptions à l’aide d’un bloc begin rescue permet d’afficher un message d’erreur à l’utilisateur si le fichier est mal formaté, et voilà le tour est joué :)

mots-clés: , , ,

Nom
Adresse email
http://
Message