Ir para o conteúdo
Allin

Ponto e vírgula, tabulação, barra: escolher um delimitador que sobreviva à viagem

Publicado a 27/07/2026 · 16 min de leitura · Ferramentas para programadores

Daniel Okonkwo

Daniel OkonkwoProgramador front-end e redator de Tecnologia na Allin

Desempenho web · Formatos de ficheiro

Verificado a partir de 4 fontes

Ver perfil
Em resumo

O delimitador não é questão de gosto: é decidido pelo separador decimal de quem abre o ficheiro. Nas convenções francesa, alemã, espanhola, italiana e portuguesa a vírgula é a marca decimal, portanto o mesmo carácter não pode também separar os campos sem citar todos os números. Esses sistemas usam o ponto e vírgula, e uma folha de cálculo assim configurada abre um ficheiro separado por vírgulas como uma única coluna de texto. Passe uma exportação real com ponto e vírgula — Produit;Prix;Remise;Ville com valores como 12,50 e 5,0% e uma cidade citada Lyon, Rhône — pelo conversor de delimitador e a diferença conta-se. Escrito com ponto e vírgula, tabulações ou barras, o ficheiro não precisa de célula citada nenhuma. Escrito com vírgulas, precisa de cinco: cada número decimal e cada percentagem tem de ser embrulhado para que a vírgula interior não seja lida como fronteira. Escrito com espaços, uma célula fica citada e o ficheiro torna-se ilegível para tudo o que corte pelos brancos. A tabulação é a mais segura das três alternativas, porque nenhum formato numérico e quase nenhuma morada contém uma, mas não sobrevive ao copiar e colar: uma tabulação escrita num campo do navegador muda o foco, e muitos editores transformam-na em espaços. A barra é igualmente segura e igualmente não normalizada — nenhuma folha de cálculo a abre sem uma caixa de importação. O Excel honra ainda uma primeira linha sep=; como instrução, convenção de fabricante ausente do RFC 4180. O conversor reescreve bem essa linha ao mudar de delimitador, transformando sep=; em sep=, — mas um conversor que desconheça a convenção vai lê-la como o seu cabeçalho.

Porque é a língua de quem lê que decide o delimitador, o que o conversor faz às aspas quando muda, o que é realmente a primeira linha sep=, e a contagem de células citadas na mesma exportação escrita de cinco maneiras.

Um carácter não pode fazer dois trabalhos

Todo o assunto se reduz a uma colisão. Um ficheiro CSV precisa de um carácter para marcar a fronteira entre campos. Um número escrito precisa de um carácter para marcar a fronteira entre a parte inteira e a fração. Nas convenções anglófonas são a vírgula e o ponto, e não há conflito. Nas convenções francesa, alemã, espanhola, italiana e portuguesa a marca decimal é a vírgula, e o conflito é total: o carácter que separa doze de cinquenta dentro de um preço é o mesmo que separaria o preço da coluna seguinte.

Só há duas saídas para uma colisão dessas, e a indústria escolheu a segunda. A primeira é manter a vírgula como separador de campos e citar todo o valor que contenha uma, o que é lícito e o formato prevê explicitamente. A segunda é mudar de separador. Os sistemas operativos dessas regiões trazem uma definição de separador de listas ao lado do separador decimal, e está no ponto e vírgula precisamente para que os dois nunca se cruzem; as folhas de cálculo leem-na ao guardar e ao abrir um CSV. O resultado é que um ficheiro exportado por um colega em Lyon e outro exportado por um colega em Chicago são formatos diferentes com a mesma extensão, e cada um abre como uma coluna de texto na máquina do outro.

A mesma exportação, cinco escritas, contada

Eis uma pequena exportação francesa, quatro colunas: Produit, Prix, Remise, Ville. Duas linhas: Café a 12,50 com 5,0% de desconto em Lyon, Rhône, e Thé a 8,90 com 0,0% em Paris. Contém tudo o que torna esta questão real — vírgulas decimais, uma percentagem escrita com vírgula, e um nome de cidade que contém legitimamente uma vírgula e um espaço.

Passe-a cinco vezes pelo conversor de delimitador e conte as células que voltam entre aspas. Com ponto e vírgula, tabulações ou barras: zero. Nem uma célula do ficheiro precisa de proteção, porque nenhum valor contém qualquer um desses três carateres. Com vírgulas: cinco. O preço do Café, o seu desconto, a sua cidade, o preço do Thé e o seu desconto têm todos de ser citados, e o ficheiro passa de limpo a atulhado. Com espaços: uma célula citada, a cidade, e o resto do ficheiro torna-se uma armadilha para tudo o que trate uma sequência de brancos como uma só fronteira.

Repare no que o conversor faz às aspas, porque é aí que os scripts caseiros erram. Ao passar de ponto e vírgula para vírgulas, acrescenta aspas à volta de 12,50 e de 5,0% — valores perfeitamente seguros antes e que já não o são. Ao passar de vírgulas para ponto e vírgula, retira as aspas de Lyon, Rhône, porque uma vírgula dentro de um campo já não é fronteira e a proteção passou a ruído. Um script que troca os carateres com um procurar e substituir não faz nem uma coisa nem outra: reescreve a vírgula de Lyon, Rhône como ponto e vírgula, partindo a cidade em duas, e deixa 12,50 sem aspas, pelo que o leitor seguinte encontra uma coluna a mais. Analisar e reemitir é a única implementação correta, e o sinal visível de que uma ferramenta o faz é que as aspas mudam quando o delimitador muda.

Tabulação: a mais segura no papel, frágil em trânsito

O argumento a favor da tabulação é que nenhum formato numérico contém uma, em nenhuma configuração regional. Nem nenhuma morada postal, nome de produto ou nome de pessoa de uso corrente, portanto um ficheiro separado por tabulações com dados de negócio reais não costuma precisar de aspas nenhumas — foi exatamente o que a contagem de cinco escritas acima mostrou. É além disso o formato que a própria folha de cálculo deixa na área de transferência: copie um bloco de células e o que lá aterra como texto simples vem separado por tabulações, razão pela qual colar uma seleção num editor de texto lhe entrega um TSV já feito. As ferramentas de linha de comandos vão pelo mesmo lado, o cut à cabeça: corta pela tabulação salvo indicação em contrário. Pelos méritos do carácter, ganha.

Perde no transporte. Uma tabulação é um carácter de controlo com uma função em cada interface de introdução de texto por onde passa, e essa função não é ser dado. Escrita num campo de navegador, move o foco para o controlo seguinte. Colada numa mensagem de chat ou num gestor de tarefas, é muitas vezes representada como uma sequência de espaços e por vezes convertida neles. Muitos editores estão configurados para expandir uma tabulação escrita em espaços, portanto quem abrir o ficheiro para corrigir uma célula pode destruir a estrutura de cada linha em que toque sem ver nada mudar no ecrã. E como uma tabulação parece um trecho em branco, uma tabulação transformada em espaços é invisível até que um analisador lhe diga que a linha tem um só campo.

Vale a pena conhecer um detalhe sobre como este conversor escreve a saída separada por tabulações, porque surpreende quem espera um TSV em bruto. Aplica as regras de aspas do CSV ao formato de tabulações: uma célula que contenha uma tabulação, uma quebra de linha ou uma aspa dupla é envolvida em aspas e as suas aspas internas são duplicadas. Assim, uma célula com say "hi" sai como "say ""hi""" embora não tenha tabulação nenhuma. As folhas de cálculo leem isso corretamente. As ferramentas que cortam cada linha pela tabulação e tomam os pedaços à letra, não: veem as aspas como parte do valor. Se o seu consumidor for um simples separador de campos e não um leitor de CSV, verifique o que faz com uma célula citada antes de confiar no ficheiro.

A linha sep=, e o que este conversor acerta por acidente

O Excel aceita uma primeira linha da forma sep=; e lê-a como uma instrução: o carácter depois do sinal de igual é o separador de campos deste ficheiro, diga o que disser a definição de separador de listas da máquina. É o único mecanismo de uso corrente que permite a um ficheiro CSV declarar o seu próprio delimitador, e não faz parte nem do RFC 4180 nem do registo do tipo de media text/csv: é uma convenção de fabricante que se espalhou porque resolve um problema real ao preço de uma linha.

É aí que aperta. Nada que não tenha aprendido a convenção a vai reconhecer, e o ficheiro não tem forma de sinalizar que aquela linha é metadado e não dado. Um leitor de CSV genérico trata-a como o primeiro registo, e se esse leitor usar também a primeira linha como cabeçalho, os seus nomes de coluna passam a ser sep= e uma série de marcadores posicionais, enquanto o seu cabeçalho verdadeiro escorrega para os dados. É exatamente o que acontece se der um ficheiro desses a um conversor de CSV para JSON sem retirar a linha primeiro.

O conversor de delimitador lida bem com isso, e a razão merece ser contada porque ninguém a desenhou. A ferramenta nunca ouviu falar da convenção: analisa sep=; como um registo ordinário, o que com o ponto e vírgula por delimitador dá duas células — sep= e uma vazia — e depois reescreve esse registo com o novo delimitador. Converter para vírgulas produz sep=, converter para tabulações produz sep= seguido de uma tabulação, e converter para barras produz sep=|. Em todas as direções a pista continua verdadeira para o ficheiro que etiqueta. O mesmo acidente ajuda a deteção: a linha de pista contém exatamente uma ocorrência do carácter que nomeia e nenhuma dos outros três candidatos, e só são tidos em conta os caracteres vistos no primeiro registo — portanto um ficheiro com a pista oferece um único candidato, justamente o que a linha nomeia.

A deteção automática pesa cinco registos, e a regularidade ganha à frequência

A deteção conta aqui a vírgula, o ponto e vírgula, a tabulação e a barra, saltando o que estiver entre aspas, e fá-lo registo a registo — cinco no máximo, nunca o ficheiro inteiro. Um candidato cuja contagem se repete igual em cada registo lido recebe um bónus grande, portanto a regularidade pesa mais do que a simples frequência na linha de cabeçalho. Dê-lhe um cabeçalho a,b,c|d sobre as linhas 1|2 e 3|4 e a resposta é a barra, mesmo que esse cabeçalho traga duas vírgulas contra uma só barra: a contagem de barras repete-se em cada registo, ao passo que a das vírgulas cai a zero logo no segundo. A regularidade é o melhor sinal, porque uma fronteira de coluna verdadeira aparece o mesmo número de vezes em cada linha de um ficheiro bem formado, ao passo que um carácter que apenas calha estar num título aparece onde calha.

Dois limites sobrevivem a essa regra, e vale a pena conhecer os dois antes de deixar a definição em automático. O primeiro: só são candidatos os caracteres que aparecem no primeiro registo. Um cabeçalho a,b sobre uma linha 1;2;3;4 continua a devolver a vírgula, porque o ponto e vírgula nunca aparece na linha que monta a lista — as linhas de baixo não podem promover um carácter que o cabeçalho não mostrou. O segundo: cinco registos são uma janela, não uma prova. Dê-lhe um cabeçalho a,b,c|d sobre quatro linhas da forma 1|2 e responde barra; acrescente um sexto registo 9|10|11, que quebra o padrão, e a resposta continua a ser a barra, porque esse registo nunca é lido. Suba essa mesma linha para quinto lugar e a resposta salta para a vírgula. O sintoma de um palpite errado é o mesmo nos dois casos: as linhas voltam como uma só célula larga, com o separador verdadeiro ainda lá dentro. O remédio é um clique: fixe explicitamente o delimitador de origem em vez de o deixar em automático. Um ficheiro sem delimitador nenhum cai para a vírgula, o que não muda nada e é a omissão certa.

Duas últimas notas práticas. A opção de espaço existe na ferramenta e quase nunca deve ser escolhida: todo o campo que contenha um espaço fica citado, o que em dados reais é quase todos, e nenhum leitor trata uma sequência de espaços como espera. E a conversão é reversível nos dois sentidos com entrada bem formada: pegue num ficheiro com vírgulas cuja cidade esteja citada como Paris, France, converta-o para ponto e vírgula e volte, e recupera o ficheiro original carácter a carácter, porque as aspas são recalculadas em cada passagem em vez de transportadas.

A mesma exportação francesa escrita de cinco maneiras — contagens de células citadas medidas executando o conversor
DelimitadorCélulas citadas necessáriasOnde funcionaOnde se parte
Vírgula5 de 12 célulasA omissão das ferramentas em locale inglesa e do registo do tipo de mediaUma folha de cálculo cujo separador de listas é o ponto e vírgula abre o ficheiro todo numa coluna
Ponto e vírgula0 de 12 célulasQualquer máquina cuja marca decimal seja a vírgula — convenções francesa, alemã, espanhola, italiana, portuguesaUma folha de cálculo em locale inglesa, e todo o importador que assuma a vírgula sem perguntar
Tabulação0 de 12 célulasFicheiros passados de máquina para máquina; nenhum formato numérico nem morada contém uma tabulaçãoO copiar e colar: uma tabulação move o foco num formulário e muitos editores transformam-na em espaços
Barra vertical0 de 12 célulasVisível, sobrevive ao copiar e colar, e não aparece em quase nenhum dado naturalNão normalizado: nenhuma folha de cálculo o abre sem caixa de importação, e nenhum tipo de media o nomeia
Espaço1 de 12 células, e muito mais com dados reaisNada que outro delimitador não faça melhorTodo o campo com um espaço, ou seja quase todos os nomes, moradas e descrições
Conversor de delimitadorTroque o delimitador dos seus dados — vírgula, tabulação, ponto e vírgula, barra ou espaço. Largue um ficheiro em vez de o colar: é lido no seu navegador e nunca é enviado.Experimentar a ferramenta

Perguntas frequentes

O meu colega abre o meu CSV e está tudo na coluna A. O que envio em vez disso?
A máquina dele espera um separador de campos diferente do que usou, e nove em cada dez vezes isso significa que enviou vírgulas a alguém cujo separador de listas é o ponto e vírgula. Converta o ficheiro para ponto e vírgula e envie de novo. Se não souber de qual precisa, ou se o ficheiro for para várias pessoas ao mesmo tempo, há duas opções robustas: acrescentar uma primeira linha sep= seguida do seu delimitador, que o Excel honra e que torna o ficheiro autodescritivo, ou enviar um ficheiro de folha de cálculo a sério em vez de um CSV, já que esse formato regista a sua própria estrutura e não tem separador para adivinhar. Atenção: a linha sep= só ajuda um leitor que conheça a convenção — um script que leia o ficheiro vai tomá-la pela sua linha de cabeçalho.
Um ficheiro separado por vírgulas com números citados continua correto?
Sim, totalmente. Citar um campo que contém o delimitador é precisamente para o que o mecanismo existe, e um ficheiro bem citado é analisado corretamente em toda a parte. As objeções são práticas e não formais. É bem mais difícil de ler a olho, portanto quem percorra o ficheiro à procura de um erro tem de abrir caminho por entre as aspas. É maior, em dois carateres por valor citado mais uma aspa duplicada por cada aspa interna. E é frágil nas mãos de quem o editar a seguir: alguém que abra o ficheiro num editor e retire o que lhe parece uma aspa perdida à volta de um preço acabou de corromper todas as linhas abaixo do ponto onde as colunas deslizaram. Escolher um delimitador ausente dos dados elimina por completo a necessidade de aspas, e um ficheiro que nunca precisa de aspas não pode ser partido por quem o arruma.
Uso tabulação ou barra quando controlo as duas pontas?
Tabulação se o ficheiro só circular entre programas, e barra se um humano o vai olhar ou deslocar. Ambas são igualmente seguras face aos dados — nenhuma aparece num número, numa morada ou num nome de uso corrente — portanto a diferença é toda de manuseamento. A tabulação ganha em ferramentas: as folhas de cálculo e os utilitários de linha de comandos abrem um ficheiro separado por tabulações sem caixa de importação. A barra ganha em visibilidade e em sobrevivência: vê-se num terminal, é inequívoca numa captura de ecrã, e atravessa sem dano uma mensagem de chat, um campo de formulário e um editor de texto, o que não é verdade para a tabulação em nenhum dos três casos. Se o ficheiro for colado algures em algum momento da sua vida, escolha a barra.
Porque é que o conversor acrescenta aspas quando passo de ponto e vírgula para vírgulas?
Porque essas células contêm uma vírgula e a vírgula acabou de se tornar uma fronteira. Um preço escrito 12,50 era um valor ordinário num ficheiro com ponto e vírgula e seria lido como duas colunas num ficheiro com vírgulas, portanto tem de ser embrulhado. O mesmo acontece a uma percentagem escrita 5,0% e a qualquer morada que contenha uma vírgula. Não é prudência do conversor: é o mínimo necessário para que o ficheiro continue a significar o que significava. A operação inversa retira aspas pela mesma razão: volte a ponto e vírgula e as aspas à volta de um valor cujo único carácter especial era uma vírgula desaparecem, porque esse carácter já não separa nada. Se prefere não arrastar as aspas, é justamente esse o argumento para converter para tabulações ou barras, onde nada nos dados precisa de proteção.
O separador decimal em si é convertido?
Não, e não deveria ser. O conversor de delimitador muda a estrutura do ficheiro e nunca o conteúdo de uma célula: um preço escrito 12,50 continua 12,50 seja qual for o delimitador escolhido, e um preço escrito 12.50 continua 12.50. Converter também os números seria uma operação diferente e muito mais perigosa, porque exigiria decidir, célula a célula, se uma vírgula é marca decimal ou separador de milhares — e 1,500 tanto é um e meio como mil e quinhentos consoante a resposta. Se precisar de reformatar os números para um leitor de outra convenção, faça-o como um passo separado e deliberado em que veja que colunas são afetadas, e confirme um valor cuja resposta conheça antes de aceitar o resultado.

Artigos que podem interessar-lhe

Todos os guias
ExplicaçãoDe CSV para JSON: os cinco casos que partem qualquer conversorDelimitadores entre aspas, quebras de linha embutidas, tipos ambíguos, cabeçalhos repetidos e codificação. Cada caso passou pelo conversor e a saída exata está aqui — incluindo os dois que ele não salva.ExplicaçãoPorque é que o seu CSV parte os acentos e as datas no ExcelTrês avarias completamente diferentes escondem-se atrás da mesma frase. Uma é a codificação, outra o separador, outra o Excel a adivinhar tipos enquanto abre o ficheiro — e o remédio é diferente para cada uma. Eis como distingui-las em cinco segundos.GuiaColar uma tabela num pull request: o que parte, e os dois carateres que partem tudoUma tabela Markdown proíbe exatamente dois carateres dentro de uma célula: a barra vertical e a quebra de linha. Aqui está o que cada um faz, como um conversor os trata, porque é que o escape tem de ser aplicado na ordem certa, e porque é que o alinhamento da fonte nunca conta.GuiaTranspor uma tabela cujas linhas deviam ter sido colunasO que acontece à linha de cabeçalho, às linhas de comprimento desigual, aos tipos — e a única coisa com que transpor é regularmente confundido e que não consegue fazer.ExplicaçãoDe JSON para CSV quando a estrutura é aninhada: porque não há resposta certaAs mesmas duas encomendas saem com cinco colunas de um conversor e dez de outro, e nenhum está errado. Caminhos com pontos, arrays de escalares, arrays de objetos e registos com chaves diferentes: quatro decisões, tomadas por si e quase sempre em silêncio.GuiaCódigos de estado HTTP explicados: os que realmente se confundem301 contra 308, 302 contra 307, 401 contra 403, 404 contra 410 — e o que promete realmente o Retry-After num 429 ou num 503. Os pares em que escolher o código errado muda o comportamento, não apenas a redação.

Ferramentas relacionadas

Isto descreve o que estes conversores fazem hoje, verificado executando-os, e não o que uma norma obrigue um conversor a fazer. O CSV não tem norma prescritiva: o RFC 4180 é informativo e descreve uma prática corrente, pelo que duas ferramentas aparentemente corretas podem divergir sobre o mesmo ficheiro sem que nenhuma esteja errada. O achatamento, a deteção de tipos e a de arrays são convenções, não regras. Antes de converter dados que não possa reexportar, passe primeiro por uma cópia e compare o número de linhas e colunas nas duas pontas.

Fontes

Detetaste um erro neste artigo?