10
votes

TABLET DÉPLIMITÉ DU FICHIER PARSIS DANS LES RAILS

J'ai un fichier qui ressemble à ce xxx

Ces valeurs sont délimitées et, à partir de ceci, je veux l'analyser à Ruby et la mettre dans ma base de données.

J'ai essayé le suivant xxx

mais @stuff vient de retourner tout l'objet entier et ne semble pas utiliser le séparateur de colonne I spécifié.

Il ne prend pas non plus en compte que la première ligne est un en-tête.

Comment puis-je analyser un fichier délimité à partir de onglet et comment Je dis que la première ligne est une en-tête?


1 commentaires

Merci, coïncidence: col_sep => "\ t" a sauvé ma journée: D


3 Réponses :


4
votes

J'ai eu le succès avec FasterCSV et Ruby 1.8.7, je pense que c'est maintenant la bibliothèque CSV Core CSV en 1.9, en utilisant ceci:

table = FasterCSV.read(result_file.to_file.path, { :headers => true, :col_sep => "\t", :skip_blanks => true })
unless table.empty?
    header_arry = Array.new
    table.headers.each do |h|
      #your header logic, e.g.
      # if h.downcase.include? 'pos'
        # header_arry << 'position'
      # end
      # simplest case here
      header_arry << h.downcase
      #which produces an array of column names called header_arry
    end

    rows = table.to_a
    rows.delete_at(0)
    rows.each do |row|
      #convert to hash using the column names
      hash = Hash[header_arry.zip(row)]
      # do something with the row hash
    end
  end


2 commentaires

"Variable locale indéfinie ou méthode` Header_arry '"- Le fichier texte n'a pas l'en-tête défini de manière particulière, je ne pense pas ... désolé je suis très nouveau aux rails


J'ai ajouté un peu plus d'explications dans la section d'en-tête. Afaik il utilise juste la première rangée, rien n'a besoin de définir comme Haeder



2
votes

Mise à jour

Consultez le gem "Smarter_csv" https://github.com/tilo/smarter_csv/ ; Il a quelques fonctionnalités intéressantes pour créer des hachages à partir de données CSV. P>

réponse précédente h3>

Voici comment je le ferais (le long de la façon dont je convertis les "tableaux de tableaux" qui sont retournés par CSV.Read ou CSV.PARSE, dans "Tableaux de hachage" ... Cela permet aux données des données, et il est un peu plus facile à traiter de cette façon. P>

csv_data.each do |hash|
  # ...
end

1 commentaires

Découvrez le gem 'smarter_csv' - il a quelques options intéressantes!



-1
votes

J'ai utilisé un moyen simple d'analyser les données CSV. Ici, les délimiteurs sont l'onglet, l'espace, la virgule ou le point-virgule. Il renvoie une gamme de champs.

row_data = File.new("your_file.csv").read

row_data = row_data.split(/[ ,;\s]/).reject(&:empty?)


0 commentaires