Chaîne d'analyse Ruby CSV avec des citations échappées
J'ai une ligne dans mon fichier CSV qui a échappé à certains de devis:
173,"Yukihiro \"The Ruby Guy\" Matsumoto","Japan"
Lorsque j'essaie de l'analyser, c'est le Ruby CSV analyseur:
require 'csv'
CSV.foreach('my.csv', headers: true, header_converters: :symbol) do |row|
puts row
end
J'obtiens cette erreur:
.../1.9.3-p327/lib/ruby/1.9.1/csv.rb:1914:in `block (2 levels) in shift': Missing or stray quote in line 122 (CSV::MalformedCSVError)
Comment puis-je obtenir autour de cette erreur?
source d'informationauteur Andrew | 2013-01-26
Vous devez vous connecter pour publier un commentaire.
CSV soutient les "convertisseurs", que l'on peut normalement utiliser pour masser le contenu d'un champ avant qu'il soit passé à notre code. Par exemple, qui peut être utilisé pour bande d'espaces supplémentaires sur tous les champs de la ligne.
Malheureusement, les convertisseurs d'incendie après la ligne est divisée en champs, et c'est durant cette étape que CSV est en colère à propos de l'embedded citations, de sorte que nous avons à obtenir entre la "lecture" de l'étape, et le "parser la ligne dans les champs".
C'est mon exemple de fichier CSV:
De préserver votre
CSV.foreach
méthode, c'est mon exemple de code pour l'analyse sans CSV colère:Et le hachage et le nom de la valeur:
J'ai supposé que tu voulais un hachage de retour parce que vous avez spécifié le
:headers
drapeau:La
\"
est typique Unix alors que Ruby CSV attend""
À analyser:
Remarque: si votre fichier CSV est très grand, il utilise beaucoup de RAM pour lire l'intégralité du fichier. Pensez à lire le fichier ligne par ligne.
Remarque: si votre fichier CSV peut avoir des barres obliques à l'avant de la barre oblique, l'utilisation Andrew Grimm suggestion ci-dessous pour vous aider:
Ouvrir le fichier dans MSExcel et enregistrer sous MS-DOS Séparé par des Virgules(.csv)