Tengo un CSV de dos columnas con un nombre y un número. El nombre de algunas personas usa comas, por ejemplo, Joe Blow, CFA.
esta coma rompe el formato CSV, ya que se interpreta como una nueva columna.
He leído y la receta más común parece ser reemplazar ese carácter, o reemplazar el delimitador, con un nuevo valor (por ejemplo this|that|the, other
).
Realmente me gustaría mantener el separador de coma (sé que Excel es compatible con otros delimitadores, pero otros intérpretes pueden no). También me gustaría mantener la coma en el nombre, ya que Joe Blow| CFA
parece bastante tonto.
¿Hay alguna manera de incluir comas en columnas CSV sin romper el formato, por ejemplo escapándolos?
Respuestas:
Encierre el campo entre comillas, p. Ej.
Ver wikipedia .
Actualizado :
Para codificar una cotización, use
"
, un símbolo de doble comilla en un campo se codificará como""
, y todo el campo se convertirá""""
. Entonces, si ve lo siguiente en, por ejemplo, Excel:el archivo CSV contendrá:
Una coma simplemente se encapsula utilizando comillas, por lo que se
,
convierte","
.Una coma y una cita deben ser encapsuladas y citadas, por lo que se
","
convierte""","""
.fuente
","
) y las comillas se escapan (por ejemplo"""
)El problema con el formato CSV es que no hay una especificación, hay varios métodos aceptados, sin ninguna forma de distinguir cuál debe usarse (para generar / interpretar). Discutí todos los métodos para escapar de los personajes (nuevas líneas en ese caso, pero la misma premisa básica) en otra publicación . Básicamente se trata de utilizar un proceso de generación / escape CSV para los usuarios previstos, y esperando que al resto no le importe.
Documento de especificaciones de referencia .
fuente
Si quieres hacer lo que dijiste, puedes usar comillas. Algo como esto
ahora puede usar una coma en su variable de nombre.
fuente
$whatever = "\"".$name."\"";
Necesita citar esos valores.
Aquí hay una especificación más detallada.
fuente
Además de los puntos en otras respuestas: una cosa a tener en cuenta si está utilizando comillas en Excel es la ubicación de sus espacios. Si tiene una línea de código como esta:
Excel tratará la cita inicial como una cita literal en lugar de usarla para escapar de comas. Su código deberá cambiar a
Fue esta sutileza la que me trajo aquí.
fuente
Me enfrenté al mismo problema y citar el
,
no ayudó. Finalmente, reemplacé el,
con+
, terminé el procesamiento, guardé la salida en un archivo externo y reemplacé el+
con,
. Esto puede parecer feo pero funcionó para mí.fuente
+
no existe en absoluto en mis datos. Gracias por tu amable comentario.""
. Esta es la forma normal de hacerlo.field = field.replace('"', '""')
Paso 2: después del Paso 1, encierre el campo en comillas dobles, por ejemplofield = '"' + field + '"'
, entonces creo que está fundido en hierro.Dependiendo de su idioma, puede haber un método to_json disponible. Eso escapará a muchas cosas que rompen los CSV.
fuente
Descubrí que algunas aplicaciones como Numbers en Mac ignoran la comilla doble si hay espacio antes.
a, "b,c"
No funciona mientrasa,"b,c"
trabaja.fuente
Puede codificar sus valores, por ejemplo en PHP base64_encode ($ str) / base64_decode ($ str)
OMI, esto es más simple que duplicar cotizaciones, etc.
https://www.php.net/manual/en/function.base64-encode.php
Los valores codificados nunca contendrán una coma, por lo que cada coma en su CSV será un separador.
fuente
Puede usar literales de plantilla (cadenas de plantilla)
p.ej -
fuente
Puede utilizar el
Text_Qualifier
campo en su administrador de conexión de archivos planos como"
. Esto debería envolver sus datos entre comillas y solo separados por comas que están fuera de las comillas.fuente
Primero, si el valor del elemento tiene un carácter de comillas dobles ("), reemplácelo con 2 caracteres de comillas dobles (" ")
Finalmente, ajuste el valor del artículo:
A LA IZQUIERDA: con comillas dobles (")
A LA DERECHA: con comillas dobles (") y comas (,)
fuente
Las comillas dobles no funcionaron para mí, funcionaron para mí
\"
. Si desea colocar comillas dobles como ejemplo, puede establecer\"\"
.Puedes construir fórmulas, como ejemplo:
escribirá en csv:
fuente
Puede que no sea lo que se necesita aquí, pero es una pregunta muy antigua y la respuesta puede ayudar a otros. Un consejo que encuentro útil al importar a Excel con un separador diferente es abrir el archivo en un editor de texto y agregar una primera línea como:
sep = |
donde | es el separador que desea que Excel use. Alternativamente, puede cambiar el separador predeterminado en Windows pero un poco largo:
Panel de control> Reloj y región> Región> Formatos> Adicional> Números> Separador de lista [cambie de coma a su alternativa preferida]. Eso significa que Excel también predeterminará la exportación de CSV utilizando el separador elegido.
fuente