Identificar delimitador CSV: vírgula, ponto e vírgula, tab ou barra
Arquivos CSV nem sempre usam vírgulas. Exportações regionais costumam adotar ponto e vírgula, pipelines de dados podem preferir tabulações e ferramentas de linha de comando frequentemente geram texto separado por barras.
Executar grátis
Este detector examina uma amostra representativa e identifica o delimitador mais provável entre vírgula, ponto e vírgula, tabulação e barra vertical. Ele exige um padrão estável em todas as linhas não vazias, portanto não tenta adivinhar quando a estrutura é inconsistente. O resultado informa o caractere, seu nome, o número estimado de colunas e a quantidade de linhas examinadas.
Escolha uma amostra CSV representativa
Cole pelo menos duas linhas não vazias do mesmo arquivo CSV, de preferência o cabeçalho e algumas linhas comuns de dados. Uma boa amostra preserva os separadores e as quebras de linha originais; você não precisa enviar um arquivo grande inteiro apenas para identificar o formato. O detector avalia quatro candidatos comuns: vírgula, ponto e vírgula, tabulação e barra vertical. Linhas vazias são ignoradas, inclusive a linha final deixada por muitos editores, pois elas não contêm estrutura de campos. Cada linha relevante deve ter a mesma quantidade de ocorrências do separador verdadeiro. Por exemplo, um cabeçalho com três campos e duas linhas com três campos produzem duas ocorrências por linha. Caso a amostra contenha explicações antes do cabeçalho, registros multilinha ou linhas cortadas, remova esses trechos ou escolha uma parte mais representativa. Uma entrada consistente oferece evidências da estrutura em vez de exigir uma inferência baseada em um caractere isolado. O conteúdo permanece intacto: a detecção relata o resultado, mas não reformata, interpreta, armazena nem corrige o CSV enviado.
Entenda a decisão por frequência
Para cada caractere candidato, o detector conta as ocorrências literais em todas as linhas não vazias. Um candidato só permanece elegível quando aparece pelo menos uma vez em cada linha e mantém exatamente a mesma contagem. Entre os candidatos elegíveis, vence aquele com a maior frequência por linha. O método é determinístico e fácil de conferir: o mesmo texto sempre gera o mesmo resultado, sem modelo, acesso à rede, configuração regional ou escolha aleatória. A quantidade de colunas retornada corresponde à contagem vencedora mais um, enquanto o total de linhas mostra quanta evidência foi analisada. A análise por frequência é intencionalmente mais simples que um parser CSV completo. Caracteres candidatos dentro de valores entre aspas também entram na contagem. Se um texto entre aspas tiver números variáveis de vírgulas e os pontos e vírgulas separarem os campos de forma constante, o ponto e vírgula ainda poderá vencer; porém, aspas complexas ou registros multilinha podem tornar todos os candidatos inconsistentes. Nesse caso, o detector informa um erro em vez de oferecer uma resposta duvidosa. Use depois um parser CSV dedicado quando precisar tratar aspas e escapes integralmente.
Resolva amostras inconsistentes ou ambíguas
Um erro é útil quando a amostra não sustenta uma resposta confiável. Se nenhuma vírgula, ponto e vírgula, tabulação ou barra tiver a mesma contagem positiva em todas as linhas não vazias, a ferramenta informa que nenhum candidato aparece de modo consistente. Isso costuma revelar linhas danificadas, exportações misturadas, observações coladas ou uma amostra que nem sequer representa dados delimitados. Outro erro cobre a ambiguidade: dois ou mais candidatos podem empatar na maior frequência consistente. Escolher um deles por uma prioridade arbitrária tornaria a leitura posterior imprevisível, por isso o detector solicita uma amostra mais clara. Inclua mais linhas representativas, remova comentários ao redor ou verifique as configurações de exportação do sistema de origem. Uma única linha também é recusada, pois a repetição da estrutura entre linhas é a evidência central do método. Após uma detecção bem-sucedida, envie o caractere retornado ao seu leitor CSV e, se desejar, confirme que as linhas analisadas têm o número informado de colunas. O uso no navegador é gratuito; chamadas automatizadas da API custam US$ 0,002 por solicitação. Os dois canais executam exatamente a mesma lógica pura.
Casos de uso
Configure uma importação automaticamente
Examine uma amostra do fornecedor antes de definir a opção de delimitador em um parser CSV ou na importação do banco de dados.
Diagnostique uma planilha que não abre corretamente
Confirme se a exportação usa ponto e vírgula regional no lugar da vírgula esperada pelo formulário de envio.
Valide premissas do pipeline
Confira se o texto delimitado recebido mantém uma estrutura estável antes da transformação ou do mapeamento de esquema.
Perguntas frequentes
Quais delimitadores podem ser detectados?
Os candidatos são vírgula, ponto e vírgula, tabulação e barra vertical.
Quando um delimitador é considerado consistente?
Ele deve aparecer pelo menos uma vez e ter exatamente a mesma contagem em cada linha não vazia.
As linhas vazias entram na análise?
Não. Linhas vazias ou apenas com espaços são ignoradas, inclusive uma linha vazia no final.
A detecção entende campos CSV entre aspas?
Não. A análise conta ocorrências literais, inclusive caracteres candidatos dentro de valores entre aspas.
Por que uma amostra ambígua gera erro?
Quando vários candidatos empatam na maior frequência consistente, escolher por prioridade seria apenas uma suposição.
Quanto custa uma chamada de API?
Cada chamada de API custa US$ 0,002; a versão no navegador é executada localmente de graça.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/data/detect-csv-delimiter \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"name,city,score\nAda,London,92\nLinus,Helsinki,88"}'const res = await fetch("https://api.kit.forhosting.com/data/detect-csv-delimiter", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "name,city,score\nAda,London,92\nLinus,Helsinki,88"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/data/detect-csv-delimiter",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "name,city,score\nAda,London,92\nLinus,Helsinki,88"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/data/detect-csv-delimiter", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"name,city,score\\nAda,London,92\\nLinus,Helsinki,88"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"name,city,score\nAda,London,92\nLinus,Helsinki,88"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/data/detect-csv-delimiter", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"text": "name,city,score\nAda,London,92\nLinus,Helsinki,88"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.detect_csv_delimiter",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_mb | 25 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |