Português (Brasil)

Dados e planilhas · CSV Limpador

Como um analisador CSV trata citações, vírgulas incorporadas e novas linhas em campos

· Como funciona

csv análise formatos de dados

Um caminho de estado do analisador mantendo vírgulas entre aspas, aspas duplas e quebras de linha incorporadas dentro dos campos
Ilustração vetorial original ToolAcre

A divisão por vírgulas funciona até que um campo contenha uma vírgula, uma aspa ou uma quebra de linha. Esta postagem explica a pequena máquina de estado que um analisador CSV real usa, por que existem regras de cotação e o que uma ferramenta de reparo faz quando a cotação é quebrada.

Um campo de endereço com uma vírgula deslocou todas as colunas para a direita - por que a divisão ingênua não é análise

A divisão de uma linha em cada vírgula falha assim que um endereço postal, nota ou descrição de produto contém esse caractere. O separador apenas termina um campo enquanto o analisador está fora de um campo entre aspas. Entre aspas, o mesmo byte pertence ao valor e deve chegar à visualização inalterado.

ToolAcre prova isso com testes em vez de assumir que CSV é um texto simples. Um arquivo de ponto e vírgula contendo vírgulas dentro de notas citadas ainda é detectado como delimitado por ponto e vírgula porque cada candidato é analisado em linhas antes de sua forma retangular ser pontuada. As contagens de pontuação bruta nunca decidem o dialeto.

As regras de cotação - os campos que contêm o delimitador, aspas ou novas linhas são colocados entre aspas duplas e as aspas internas são duplicadas

Um campo contendo o delimitador escolhido, aspas duplas, avanço de linha ou retorno de carro é colocado entre aspas durante a serialização. Uma aspa dupla literal dentro de um campo entre aspas é representada por duas aspas adjacentes. Na análise, esse par contribui com uma aspa para a célula e não fecha o campo.

As cotações só abrem um estado entre aspas quando aparecem no início de um campo vazio. Em um valor sem aspas, como o tubo 12", a aspa permanece como dados literais. Essa escolha de implementação é testada e evita que uma marca de medida no meio do texto engula as colunas subsequentes.

Um analisador como uma máquina de estados - aspas internas versus aspas externas, e como um caractere por vez decide onde termina um campo

O loop principal rastreia um campo atual, uma linha atual e um estado `inQuotes`. Fora das aspas, o delimitador envia um campo e CR, LF ou CRLF envia uma linha. Dentro das aspas, cada caractere é anexado, exceto uma aspa, que forma um par de escape ou sai do estado entre aspas.

Essa progressão de um caractere explica por que uma expressão regular simples ou divisão de linha é frágil. Se uma nova linha termina um registro depende da entrada anterior, e se uma cotação fecha o campo depende da próxima cotação. O analisador carrega exatamente esse estado mínimo através da string.

Novas linhas incorporadas – por que uma linha pode abranger várias linhas e por que ferramentas baseadas em linhas, como grep ou wc miscount records

Um campo entre aspas pode conter LF, CRLF ou um CR solitário, e esses caracteres permanecem dentro do valor. Conseqüentemente, um registro lógico pode ocupar diversas linhas de exibição em um editor de texto. Contar linhas físicas com um comando orientado a linhas não conta necessariamente linhas de dados.

Após a citação de fechamento, o próximo delimitador ou final de registro retoma o significado estrutural. Os testes de ToolAcre afirmam tanto LF incorporado quanto CRLF incorporado e, em seguida, verificam se apenas uma linha foi produzida. Este comportamento não é inferido de um rótulo RFC; é exercido diretamente pela máquina de estado expedida.

Citações quebradas – citações desequilibradas que engolem o resto do arquivo e como uma ferramenta de reparo recoloca os campos de forma consistente

O esboço prometia um reparo na cotação, mas uma cotação não fechada é inerentemente ambígua. ToolAcre reporta `UNCLOSED_QUOTE` na linha onde o estado citado começou e lê tudo posteriormente em um campo. Não inventa uma posição de fechamento nem cita novamente os registros pretendidos.

Essa falha conservadora preserva o texto consumido para inspeção e evita fingir que sabe se uma citação posterior ou uma nova linha foi entendida como dados. Corrija a origem ou gere novamente a exportação e recarregue. A serialização pode normalizar uma tabela analisada com sucesso; ele não pode recuperar limites de linha que a fonte malformada tornou incognoscível.

A cotação quebrada é relatada, mas não reparada; um campo não fechado consome o texto restante

Use `name,note` como cabeçalho, depois uma linha com Ada e uma nota contendo uma vírgula mais uma quebra de linha e outra cuja nota é `She said "hi"`. Na fonte CSV, cite a nota longa e escreva as aspas internas como `""hi""`. O analisador retorna duas linhas de dados e mantém ambos os caracteres especiais.

Quando serializados com aspas mínimas, os nomes simples não precisam de aspas, enquanto os campos de notas são citados porque contêm caracteres estruturais. A análise dessa saída novamente produz o mesmo cabeçalho e células, mesmo que as citações de origem redundantes tenham desaparecido. A igualdade de dados, e não o estilo byte por byte, define esse percurso de ida e volta.

O que isso não cobre - dialetos que usam escapes de barra invertida e heurísticas para adivinhar a intenção quando a citação é verdadeiramente ambígua

Os dialetos de escape de barra invertida estão fora do analisador. Uma barra invertida antes de uma citação não tem nenhum significado especial de máquina de estado aqui; permanece texto, enquanto a citação é interpretada de acordo com as regras de aspas duplas. A ferramenta também se recusa a adivinhar a intenção quando uma cotação de abertura permanece inigualável.

Esses limites são importantes ao importar um dump de banco de dados configurado para outra convenção de escape. Identifique o dialeto do produtor antes de carregar ou exporte com aspas no estilo RFC. Um analisador que reconhece silenciosamente diversas regras de escape incompatíveis pode transformar barras invertidas literais em sintaxe de controle e ocultar uma incompatibilidade.

Respeite as aspas e as linhas permaneçam intactas - como o reparo de cotações do ToolAcre CSV Cleaner produz um arquivo que os analisadores padrão leem corretamente

Respeitar o estado entre aspas mantém delimitadores e finais de registro dentro das células às quais pertencem. ToolAcre também lida com três formulários de final de linha, remove um UTF-8 BOM inicial e relata incompatibilidades de largura de linha. Esses comportamentos são partes independentes de uma leitura estrutural, e não uma coleção de truques de busca e substituição.

Após uma análise válida, a serialização duplica as aspas incorporadas e cita qualquer campo que requer proteção, com saída CRLF por padrão. Após uma cotação não fechada inválida, pare e repare a partir das evidências da fonte. A ferramenta pode padronizar células conhecidas; não pretende reconstruir uma tabela incognoscível.