44 votes

CSV.read Citation illégale à la ligne x

J'utilise ruby CSV.read avec des données massives. De temps en temps, la bibliothèque rencontre des lignes mal formatées, par exemple :

 "Illegal quoting in line 53657."

Il serait plus facile d'ignorer la ligne et de la sauter, puis de parcourir chaque fichier csv et de corriger le formatage. Comment puis-je faire ceci?

85voto

Ray Baxter Points 1566

J'ai eu ce problème dans une ligne comme 123,456,a"b"c

Le problème est que l'analyseur CSV s'attend à ce que " , s'ils apparaissent, entourent entièrement le texte délimité par des virgules.

La solution utilise un caractère de guillemet en plus de " dont j'étais sûr qu'il n'apparaîtrait pas dans mes données :

CSV.read(filename, :quote_char => "|")

44voto

Will Madden Points 93

L' liberal_parsing est disponible à partir de Ruby 2.4 pour des cas comme celui-ci. À partir de la documentation :

Lorsqu'il est défini sur une valeur vraie, CSV tentera d'analyser les entrées non conformes à la RFC 4180, telles que les guillemets doubles dans les champs sans guillemets.

Pour l'activer, transmettez-le en option aux méthodes CSV read/parse/new :

 CSV.read(filename, liberal_parsing: true)

6voto

DigitalRoss Points 80400

Ne laissez pas CSV lire et analyser le fichier.

Lisez simplement le fichier vous-même et transmettez chaque ligne à CSV.parse_line , puis à rescue toutes les exceptions qu'il génère.

6voto

Tombart Points 4503

Essayez de forcer le guillemet double " comme guillemet :

 require 'csv'
CSV.foreach(file,{headers: :first_row, quote_char: "\x00"}) do |line|
  p line
end

1voto

allknowingfrog Points 113

Apparemment, cette erreur peut également être causée par des caractères de nomenclature non imprimables. Ce fil suggère d'utiliser un mode fichier pour forcer une conversion, ce qui a finalement fonctionné pour moi.

 require 'csv'

CSV.open(@filename, 'r:bom|utf-8') do |csv|
  # do something
end

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