Eu tenho um CSV de duas colunas com um nome e um número. O nome de algumas pessoas usa vírgulas, por exemplo. Joe Blow, CFA.
Esta vírgula quebra o formato CSV, pois é interpretada como uma nova coluna.
Eu li e a receita mais comum parece substituir esse caractere ou substituir o delimitador por um novo valor (por exemplo this|that|the, other
).
Eu realmente gostaria de manter o separador de vírgulas (eu sei que o Excel suporta outros delimitadores, mas outros intérpretes podem não). Eu também gostaria de manter a vírgula no nome, pois Joe Blow| CFA
parece bem bobo.
Existe uma maneira de incluir vírgulas nas colunas CSV sem interromper a formatação, por exemplo, escapando-as?
Respostas:
Coloque o campo entre aspas, por exemplo
Veja a Wikipedia .
Atualizado :
Para codificar uma cotação, use
"
, um símbolo de aspas duplas em um campo será codificado como""
e todo o campo se tornará""""
. Portanto, se você vir o seguinte em, por exemplo, Excel:o arquivo CSV conterá:
Uma vírgula é simplesmente encapsulada usando aspas, assim
,
torna - se","
.Uma vírgula e uma citação precisam ser encapsuladas e citadas, assim
","
se torna""","""
.fonte
","
), e citações são escapados (por exemplo"""
)O problema com o formato CSV é que não há uma especificação, existem vários métodos aceitos, sem nenhuma maneira de distinguir qual deve ser usado (para gerar / interpretar). Eu discuti todos os métodos para escapar de caracteres (novas linhas nesse caso, mas a mesma premissa básica) em outro post . Basicamente, tudo se resume ao uso de um processo de geração / escape de CSV para os usuários pretendidos, e esperando que o resto não se importe.
Documento de especificação de referência .
fonte
Se você quiser fazer o que disse, pode usar aspas. Algo assim
agora, você pode usar vírgula na sua variável name.
fonte
$whatever = "\"".$name."\"";
Você precisa citar esses valores.
Aqui está uma especificação mais detalhada.
fonte
Além dos pontos em outras respostas: uma coisa a observar se você estiver usando aspas no Excel é a localização dos seus espaços. Se você tem uma linha de código como esta:
O Excel tratará a cotação inicial como uma cotação literal em vez de usá-la para escapar vírgulas. Seu código precisará mudar para
Foi essa sutileza que me trouxe aqui.
fonte
Eu enfrentei o mesmo problema e citar o
,
não ajudou. Eventualmente, substituí o,
por+
, concluí o processamento, salvei a saída em um arquivo externo e substitui o+
por,
. Isso pode parecer feio, mas funcionou para mim.fonte
+
não existe nos meus dados. Obrigado pelo seu comentário gentil.""
. Esta é a maneira normal de fazer isso.field = field.replace('"', '""')
Etapa 2 - após a Etapa 1, coloque o campo entre aspas duplas, por exemplofield = '"' + field + '"'
- então você é de ferro fundido, eu acho.Dependendo do seu idioma, pode haver um método to_json disponível. Isso escapará de muitas coisas que quebram CSVs.
fonte
Descobri que alguns aplicativos como o Numbers no Mac ignoram as aspas duplas, se houver espaço antes dele.
a, "b,c"
não funciona enquantoa,"b,c"
trabalha.fonte
Você pode codificar seus valores, por exemplo, no PHP base64_encode ($ str) / base64_decode ($ str)
OMI é mais simples do que duplicar cotações, etc.
https://www.php.net/manual/en/function.base64-encode.php
Os valores codificados nunca conterão uma vírgula; portanto, toda vírgula no seu CSV será um separador.
fonte
Você pode usar literais de modelo (seqüências de caracteres de modelo)
por exemplo -
fonte
Você pode usar o
Text_Qualifier
campo no seu gerenciador de conexões de arquivos simples como"
. Isso deve agrupar seus dados entre aspas e apenas separado por vírgulas que estão fora das aspas.fonte
Primeiro, se o valor do item tiver aspas duplas ("), substitua por 2 aspas duplas (" ")
Por fim, embrulhe o valor do item:
À ESQUERDA: Com aspas duplas (")
À DIREITA: Com aspas duplas (") e vírgula (,)
fonte
As aspas duplas não funcionaram para mim, funcionaram para mim
\"
. Se você quiser colocar aspas duplas como exemplo, pode definir\"\"
.Você pode criar fórmulas, como exemplo:
irá escrever em csv:
fonte
Pode não ser o necessário aqui, mas é uma pergunta muito antiga e a resposta pode ajudar outras pessoas. Uma dica que considero útil para importar para o Excel com um separador diferente é abrir o arquivo em um editor de texto e adicionar uma primeira linha como:
sep = |
onde | é o separador que você deseja que o Excel use. Como alternativa, você pode alterar o separador padrão no Windows, mas um pouco demorado:
Painel de controle> Relógio e região> Região> Formatos> Adicional> Números> Separador de listas [mude de vírgula para sua alternativa preferida]. Isso significa que o Excel também adotará como padrão a exportação de CSVs usando o separador escolhido.
fonte