CSV.leer Citas ilegales en la línea x


Estoy usando ruby CSV.lea con datos masivos. De vez en cuando la biblioteca encuentra líneas mal formateadas, por ejemplo:

"Illegal quoting in line 53657."

Sería más fácil ignorar la línea y saltarla, luego revisar cada CSV y corregir el formato. ¿Cómo puedo hacer esto?

Author: JZ., 2012-03-26

3 answers

Tuve este problema en una línea como 123,456,a"b"c

El problema es que el analizador de CSV espera que ", si aparecen, rodeen completamente el texto delimitado por comas.

Solución use un carácter de comilla además de " que estaba seguro que no aparecería en mis datos:

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

 65
Author: Ray Baxter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-21 15:39:24

El liberal_parsing la opción está disponible a partir de Ruby 2.4 para casos como este. De la documentación:

Cuando se establece en un valor verdadero, CSV intentará analizar la entrada no conforme con RFC 4180, como comillas dobles en campos sin comillas.

Para habilitarlo, pásalo como una opción al CSV read/parse / new methods:

CSV.read(filename, liberal_parsing: true)
 11
Author: Will Madden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-30 21:36:01

No permita que CSV lea y analice el archivo.

Simplemente lea el archivo usted mismo y entregue cada línea a CSV.parse_line, y luego rescue cualquier excepción que lance.

 5
Author: DigitalRoss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-25 21:10:43