11/1/07

csv

Los ficheros CSV están muy bien. Son de lo más simple que hay: están en texto plano, sin codificaciones extrañas, son fáciles de entender para cualquier persona y cómodos de interpretar por la máquina.

Sin embargo tienen un problema al tratar con los números. En Estados Unidos y en muchos otros países angloparlantes utilizan el "." como separador de decimales y la "," como separador de miles. En Europa lo hacemos al revés.
Así un americano diría que un euro equivale a 166.386 pesetas, mientras que un europeo diría que son 166,386

esto en un csv clásico se plasmaría de la siguiente manera:

€,pta
1,166.386

o bien

€,pta
1,"166,386"

El problema viene cuando un editor de hojas de cálculo intenta abrir el fichero. En nuestro caso, el excel 2003 mira en el sistema qué caracteres tenemos definidos para separar las listas, los decimales, y los miles. En mi caso tengo: ";" para separar las listas, "," para los decimales y "." para los miles. Resultado: ninguno de los dos ficheros csv de arriba me los abriría correctamente.

si lo hubiera puesto de la siguiente manera:
€;pta
1;166,386

hubiera funcionado a la perfección.

Si tenemos un sistema que exporta datos en csv habría que preguntarle al usuario qué separadores usa en su sistema para que todo funcione correctamente, lo cual es un engorro.

Si permitimos al usuario cargar datos a partir de ficheros csv nos ocurre lo mismo, aunque aquí podemos hacer la siguiente comprobación, que funciona en la mayor parte de los casos. Comparamos el número de "," y de ";" que hay en la primera fila. Si es superior el número de "," nos encontramos en un sistema anglosajón y si hay más ";" asumimos que es europeo. Evidentemente es una comprobación muy burda, pero eficaz en la mayoría de los casos.

No hay comentarios: