He estado haciendo algunas pruebas con CSV.table
. Tengo dos archivos CSV pequeños y casi idénticos, pero a uno le falta la fila del encabezado.Ruby 1.9.3 - ¿Cómo sabe CSV.table si no hay encabezados en un archivo CSV?
Cuando ejecuto CSV.table
en el archivo CSV con la fila del encabezado, todo funciona como se esperaba.
Cuando corro contra el archivo CSV sin la fila de cabecera me sale:
NoMethodError: undefined method `encode' for nil:NilClass
He intentado esto con diferentes tipos de datos, con diferentes tipos de cabeceras, y obtener los mismos resultados.
Tengo curiosidad por la magia de CSV.table
. Si utilizo CSV.parse
con los encabezados configurados en verdadero, siempre hace que la primera fila sea encabezados sin importar qué. Entonces, he estado usando CSV.table
para verificar si un archivo CSV que se está importando tiene una fila de encabezado, pero no estoy muy cómodo con esto porque no entiendo si o cuándo funcionará o no del modo en que lo estoy usando.
begin
CSV.table(csv_file_path)
rescue
# Add error to log or something.
end
¿Alguien lo sabe?
P.S. Ya he leído esto y el código fuente que proporciona en cada método - http://www.ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html
Gracias @ andy-h Tuve una situación similar cuando ejecuto 'contents = CSV.open" languages.csv ", encabezados: true, header_converters:: symbol' Obtuve este error:' undefined method 'encode' for nil : NilClass (NoMethodError) '. Se queja del método 'header_converter:: symbol'. Después de revisar el archivo "languages.csv", encontré que el encabezado comienza con "" un espacio. Eliminar ese espacio resolvió ese problema. – egyamado
** Corrección. ** Quise decir que me faltaba un espacio en la primera fila '", nombre, dirección, .... "' cuando agregué espacio como '', nombre, dirección, ... "' Pude ejecutar mi código. – egyamado