¿Cuáles son los metadatos “sep =” que puede agregar a los CSV?

24

Al intentar averiguar cómo hacer que los CSV se abran correctamente en Excel en una PC española (perteneciente a un cliente) encontré muchas respuestas que recomiendan usar sep=,en la parte superior del archivo:

En vista de ello, este enfoque funciona, pero ninguna de esas respuestas dar ninguna otra información sobre donde esta opción viene de metadatos. He intentado buscar lo que significa (y, por lo tanto, he encontrado todas esas respuestas), pero no he podido obtener más información, especialmente dado que la puntuación es notoriamente difícil de buscar.

Mi principal preocupación es si esta es o no una característica específica de Excel . Sospecho que lo es, pero no he encontrado nada definitivo para confirmarlo.

Algunas preguntas relacionadas son:

  • ¿Qué caracteres se pueden usar en esta configuración?
  • Qué otras configuraciones están disponibles (por ejemplo, carácter de terminación de línea, carácter de comillas, etc.).
  • ¿Hay otras herramientas que admitan oficialmente esta función?

Espero que haya algún documento en algún lugar al que alguien pueda señalarme que responda a todas estas preguntas y más; Simplemente no he podido encontrarlo.

Alguna aclaración:

El sep=no es un parámetro para un analizador. Está destinado a colocarse dentro del CSV. Ejemplo:

sep=|
"LETTER"|"ANIMAL"
"a"|"aardvark"
"b"|"bear"
"c"|"cow"
Burhan Ali
fuente
44
Sí, esto es específico de Excel .
Raystafarian
2
¿Pudiste obtener algo sobre esto? Estoy perplejo con la misma pregunta y aún no he encontrado ninguna especificación de MS que describa esta característica. Si esta característica no está documentada por MS, ¿cómo diablos salió en primer lugar?
toddlermenot
@toddlermenot Lamentablemente no. Todo lo que obtengo es que las personas afirman que es específico de Excel sin nada que respalde esa afirmación, lo cual es decepcionante.
Burhan Ali

Respuestas:

7

RFC 4180 es comúnmente reconocido como el estándar para el formato CSV, y no menciona ninguna de esas características.

El modelo W3C para datos tabulados y metadatos en la web lo menciona como una característica que no está dentro de su alcance:

Muchos archivos "CSV" incorporan metadatos, por ejemplo, en líneas antes de la fila del encabezado del documento CSV. Esta especificación no define ningún formato para incrustar metadatos en archivos CSV, aparte de los nombres de las columnas en la fila del encabezado.

Entonces, aunque no encontré ninguna prueba directa de que esta característica sea específica de Excel, aparentemente este sigue siendo el caso, ya que parece que no hay ningún documento de estandarización que cubra esa característica.

Stefan Kögl
fuente
Buen abastecimiento. Una cosa que debería decir es que sep = | define el separador para su uso en Excel como el carácter de canalización ('|'). No se usa ampliamente, pero no es exclusivo de Excel. Es una directiva de separador. Las versiones internacionales de Excel iirc tienen diferentes caracteres, por ejemplo, el idioma europeo en una máquina que ejecuta Excel utiliza punto y coma.
var firstName
1
Soy consciente del uso (tal vez eso no estaba del todo claro en mi respuesta). Solo estaba señalando que parece que Excel introdujo esa característica, basándose en cualquier tipo de estándar (público).
Stefan Kögl
-1

La instrucción sep = se usa en todos los países donde la coma se usa como delimitador decimal, como Italia. Dado que Excel exporta CSV con punto y coma en lugar de comas en esos países, si desea asegurarse de que el archivo se pueda leer en EE. UU. U otros países, NECESITA

sep =;

encima del archivo Esto es específico de Excel y otras aplicaciones podrían ignorarlo.

Dario de Judicibus
fuente
-2

Casi cualquier herramienta que pueda importar archivos .csv reconoce que la coma no es el único separador posible, por ejemplo, las pestañas han sido comunes durante mucho tiempo. Creo que esto se remonta a los días de las tarjetas perforadas, incluso, que debe haber algún carácter que se reconozca como el final del campo de datos, con la excepción de los sistemas que usan campos de ancho fijo o campos prefijados de longitud, casi todos los sistemas lo necesitan. desde el advenimiento de las computadoras.

Los 3 elementos esenciales son un separador de campo, un separador de registro y un marcador de final de datos, csv usa de forma predeterminada coma, nueva línea y final de archivo para estos, respectivamente, pero se puede usar casi cualquier entrada válida, sin embargo, necesita un mecanismo para escapar de los marcadores especiales si se producen dentro de sus datos válidos.

Un sistema histórico que encontré utilizaba nueva línea para el final del campo, 2 líneas en blanco para el final del registro y *!*!* END *!*!*para el final de los datos. Comúnmente me he encontrado con todos los ,\t|:utilizados como un separador de campo junto con varios caracteres de control.

Una cosa a tener en cuenta es que los franceses y otros usan comas como punto decimal, esto puede causar todo tipo de diversión y juegos. Existe un grado de estandarización para los archivos csv en rfc4180, pero hay momentos en los que necesita editar manualmente los archivos al exportar desde un programa e importar a otro.

Para responder a la segunda parte de su pregunta, Python, por ejemplo, incluye un lector / escritor csv como una de las bibliotecas estándar que ofrece las siguientes opciones:

  • delimiter- Este es el separador de campo (a menos que se haya escapado).
  • doublequote- Si es verdadero, un " dentro de un campo se representará como""
  • escapechar- elimina cualquier significado especial de cualquier carácter siguiente, por ejemplo, si está configurado como, \entonces la cita se puede representar como\"
  • lineterminator- por lo general uno de \n, \r, \r\no\n\r
  • quotechar- carácter utilizado para citar cadenas, generalmente "o'
  • quoting - Marcar como uno de:
    • ALL - Cada campo está entre comillas, es decir: "1","Free Beer","ASAP"
    • MINIMAL - Solo cite campos que tengan caracteres especiales, es decir: 1,"Beer, (Free)", Now, Please
    • QUOTE_NONNUMERIC - Cita cualquier cosa que no sea un número, es decir: 1,"Beer, (Free)", "Now", "Please"
    • NONE - No cite escape en su lugar, es decir: 1,Beer\, (Free), Now, Please
  • skipinitialspace- omita cualquier espacio inicial de cada campo para poder usarlo en , lugar de solo ,como un separador de campo.

En general, cuanto más flexible y bien pensada sea una herramienta que pueda importar archivos csv, más opciones tendrá (posiblemente con diferentes nombres y / o mecanismos).

Steve Barnes
fuente
2
Esto no responde mi pregunta. Explica qué son los CSV, de lo que ya estoy al tanto. Mi pregunta es sobre una sintaxis específica. ¿Hay algún fondo que pueda agregar a mi pregunta para aclarar las cosas?
Burhan Ali
1
Gracias pero eso todavía no ayuda. sep=no es un parámetro para un analizador sintáctico. He agregado algunas aclaraciones a mi pregunta.
Burhan Ali
1
@SteveBarnes Pero, ¿alguna herramienta, por ejemplo la biblioteca de Python que menciona, permite opciones como parte del contenido del archivo? Ese es, creo, el punto principal de la pregunta.
Randy Orrison
1
"Porque son una de las muchas rarezas de Excel". ¿Es así? Eso es parte de lo que estoy tratando de resolver. No quiero saber qué es un CSV. No quiero saber cómo analizar un CSV. Quiero saber qué sep=es y de dónde viene.
Burhan Ali
2
sep = es un método de sugerencia específico de Microsoft Excel que no está cubierto en ninguna especificación que no sea de Microsoft que pueda encontrar. Proviene de una parte de Microsoft.
Steve Barnes