Eu tenho uma linha como esta no meu CSV:
"Samsung U600 24"","10000003409","1","10000003427"
A cotação ao lado de 24
é usada para expressar polegadas, enquanto a cotação ao lado da cotação fecha o campo. Estou lendo a linha com, fgetcsv
mas o analisador comete um erro e lê o valor como:
Samsung U600 24",10000003409"
Tentei colocar uma barra invertida antes da citação em polegadas, mas só recebi uma barra invertida no nome:
Samsung U600 24\"
Existe uma maneira de escapar adequadamente disso no CSV, para que o valor seja Samsung U600 24"
, ou eu tenho que regexá-lo no processador?
Respostas:
Use 2 aspas:
fonte
Não apenas aspas duplas, você precisará de aspas simples (
'
), aspas duplas ("
), barra invertida (\
) e NUL (o byte NULL).Use
fputcsv()
para escrever efgetcsv()
ler, que cuidará de tudo.fonte
fputcsv()
mostra como você pode usarfputcsv()
quando deseja produzir no formato csv para o navegador em vez de um arquivo real.Eu sei que este é um post antigo, mas aqui está como eu o resolvi (junto com a conversão de valores nulos em string vazia) em C # usando um método de extensão.
Crie uma classe estática com algo como o seguinte:
Em seguida, para cada string que você está gravando no CSV, em vez de:
Você apenas faz:
fonte
Se um valor contiver vírgula, caractere de nova linha ou aspas duplas, a sequência deverá ser colocada entre aspas duplas. Por exemplo: "Caractere de nova linha neste campo \ n".
Você pode usar a ferramenta on-line abaixo para "" escapar aos operadores e. https://www.freeformatter.com/csv-escape.html#ad-output
fonte