El formato de archivo CSV ha existido durante décadas. Desafortunadamente, nunca se ha estandarizado completamente, por lo que las implementaciones variarán.
En 2005, el Grupo de trabajo de ingeniería de Internet publicó el RFC 4180, una especificación informativa que describe el formato CSV para el tipo MIME “text / csv”. Proporciona un conjunto bastante bueno de reglas a seguir, así como una gramática ABNF. Aquí está el enlace:
Formato común y tipo MIME para archivos de valores separados por comas (CSV)
Si va a escribir su propio analizador CSV, aquí hay algunos consejos que puedo darle:
- ¿Cuáles son algunos trucos organizativos simples y útiles que pueden hacer la vida más fácil, menos estresante y más productiva?
- ¿Qué puedo hacer para deshacerme de la caspa dañada (ya que es realmente mala ahora en el invierno)?
- ¿Cuáles son algunos buenos consejos para ordenar comida para cualquier ocasión?
- ¿Qué consejos prácticos le darías a un programador principiante?
- ¿Cuáles son algunos consejos nuevos para definir exactamente un nicho de mercado?
- Ni siquiera piense en usar una función de división de cadenas o una expresión regular para analizar el CSV en líneas y campos. La única forma de analizar CSV de manera confiable es carácter por carácter.
- Los registros están delimitados por un CRLF en Windows y un LF en Unix. Sin embargo, los campos pueden contener caracteres CR o LF incrustados, por lo que su analizador debe analizar cada campo y saber cuándo no está dentro de un campo.
- Los campos están delimitados por comas, pero debe proporcionar la opción de delimitación de pestañas, ya que es una alternativa común. (Por lo general, los datos de Excel que se copian en el portapapeles están delimitados por tabulaciones, no por comas).
- Los campos solo deben incluirse entre comillas si contienen un campo incrustado o un delimitador de registro.
- Las comillas incrustadas se escapan mediante comillas dobles, que es otra razón por la que debe analizar el carácter CSV por carácter. También te obliga a hacer una búsqueda anticipada de un personaje una vez dentro de un campo porque no puedes estar seguro de que la próxima cita que encuentres sea el final del campo o el escape de una cita incrustada.
- Los espacios se consideran parte de un campo y no deben ignorarse.
- El registro final del archivo no necesita tener un delimitador de registro. Tu código debe manejar eso.
- El último campo del archivo no puede terminar con una coma.
- Un archivo CSV puede tener una fila opcional de encabezados de columna. Debe permitir que la persona que llama le diga si los datos contienen una fila de encabezado o no. Si lo hace, entonces el número de campos en cada fila debe coincidir con el número de campos en el encabezado de la columna.
- Trate de ser tan indulgente con los errores como sea posible.
Escribir CSV es en realidad un poco más fácil que leerlo. Solo tiene que asegurarse de que el campo a esté encerrado entre comillas si contiene un carácter delimitador, y que todas las comillas incrustadas dentro del campo se dupliquen.
Si puede usar una biblioteca acreditada para esto, puede ahorrarle algo de dolor. Por otro lado, he probado bibliotecas que no interpretaban CSV de la forma en que Excel las crea y tuvo que abandonarlas. (Uno, por ejemplo, ignoró erróneamente los espacios de campo al principio y al final.) Tanto si usa una biblioteca como si lanza su propio analizador CSV, asegúrese de escribir un buen conjunto de pruebas unitarias.