Detecte quebras de linha em arquivos: LF, CRLF ou mistas
Saiba quais quebras de linha um arquivo realmente usa: alpha, beta e gamma terminadas em CRLF dão o estilo CRLF com 3 quebras e 0 LF isolados, e uma única quebra diferente já marca o arquivo como misto. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Texto
- alpha beta gamma
- Total
- 3
- Estilo
- CRLF
Examine o texto bruto de um arquivo e identifique a convenção de quebra de linha sem alterar o conteúdo. O detector conta quebras LF isoladas e pares CRLF do Windows, e informa se o arquivo usa LF, CRLF ou uma mistura. Ele é determinístico, independente de linguagem e útil para código-fonte, configurações, logs, exportações e texto gerado. Quando não existem quebras reconhecidas, a ferramenta retorna um erro de entrada claro em vez de fazer uma suposição sem base, tornando o resultado seguro para validação e automação.
Forneça o texto bruto exatamente como ele aparece
Envie todo o conteúdo do arquivo no campo text. As quebras de linha ficam invisíveis na maioria dos editores, e copiar de um aplicativo que normalize silenciosamente os caracteres pode mudar o que o detector recebe. Para obter um resultado confiável, leia o arquivo como texto preservando os caracteres originais e envie essa string diretamente.
A capacidade não precisa de nome de arquivo, linguagem, rótulo de codificação ou indicação do sistema operacional, pois examina os próprios caracteres de quebra. Uma quebra do Windows é a sequência de dois caracteres retorno de carro e avanço de linha, chamada CRLF. Uma quebra do tipo Unix é um avanço de linha isolado, chamado LF.
O scanner trata cada par CRLF como uma única quebra e não conta novamente o LF interno. Uma quebra final também é contada, pois faz parte do arquivo fornecido. Strings vazias ou textos de uma linha sem LF ou CRLF retornam erro, já que não existe estilo aplicável para identificar.
Interprete o estilo e as contagens
A resposta contém style, um objeto de contagens e o total de quebras reconhecidas. O objeto separa lf de crlf, deixando explícita a evidência usada na classificação. Se houver pelo menos uma quebra LF e nenhum par CRLF, o estilo será LF.
Se houver pelo menos um par CRLF e nenhum LF isolado, o estilo será CRLF. Quando os dois contadores forem maiores que zero, o estilo será misto, mesmo que uma convenção apareça muito mais vezes. Essa definição rigorosa é intencional: uma única quebra inconsistente pode afetar formatadores, patches, linters, snapshots e políticas de repositório, portanto uma classificação por maioria esconderia uma informação útil.
O total é apenas a soma dos dois contadores e pode servir como verificação ou denominador de uma porcentagem. As contagens representam sequências de quebra, não linhas lógicas; um arquivo pode ter uma linha lógica a mais, dependendo da quebra final.
Detecte antes de normalizar ou validar
A detecção é mais útil antes que outra ferramenta reescreva o arquivo. Uma verificação pré-commit pode rejeitar terminações mistas, um script de migração pode escolher a regra de normalização e um pipeline pode explicar por que um artefato mudou em outro sistema operacional. O detector apenas informa o que está presente: ele não converte CRLF em LF, não acrescenta uma quebra final, não edita conteúdo, não abre repositórios e não grava arquivos.
Esse escopo restrito mantém o resultado reproduzível e permite que você escolha a política adequada. Um projeto multiplataforma pode aceitar qualquer estilo consistente, enquanto um pacote voltado ao Linux pode exigir somente LF. Caso a origem use retornos de carro isolados antigos, converta-os ou valide-os separadamente.
Casos de uso
Aplique uma política de quebras no repositório
Verifique código e configurações em busca de LF, CRLF ou mistura antes de aceitar uma alteração gerada.
Diagnostique diferenças ruidosas
Confirme se quebras inconsistentes fazem conteúdo inalterado parecer modificado entre sistemas operacionais.
Valide exportações geradas
Conte terminações de linha e verifique se o produtor emitiu uma convenção consistente.
Perguntas frequentes
Quanto custa uma detecção?
No navegador, você pode executar localmente a mesma lógica determinística.
Como CRLF é contado?
Cada par de retorno de carro e avanço de linha conta como uma quebra CRLF, sem contar novamente seu LF.
Quando um arquivo é classificado como misto?
O estilo é misto quando a entrada contém pelo menos um LF isolado e pelo menos um par CRLF.
Esta ferramenta altera ou normaliza o texto?
Não. Ela apenas examina a string e informa contagens; nunca modifica nem devolve um arquivo reescrito.
Por que um texto sem quebras de linha dá erro?
Um texto vazio ou de uma só linha não tem estilo de quebra para detectar, então você recebe uma mensagem clara em vez de um palpite. Cole o arquivo inteiro com as quebras originais, inclusive a última, para ter uma resposta confiável.
Ferramentas relacionadas
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/dev2/line-ending-detect \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"first line\r\nsecond line\r\nthird line\r\n"}'const res = await fetch("https://api.kit.forhosting.com/dev2/line-ending-detect", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "first line\r\nsecond line\r\nthird line\r\n"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/line-ending-detect",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "first line\r\nsecond line\r\nthird line\r\n"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/line-ending-detect", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"first line\\r\\nsecond line\\r\\nthird line\\r\\n"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"first line\r\nsecond line\r\nthird line\r\n"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/line-ending-detect", 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": "first line\r\nsecond line\r\nthird line\r\n"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.line_ending_detect",
"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.
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. |
Notas técnicas
Detecte antes de normalizar ou validar
Como a implementação faz uma única varredura determinística com contadores de tamanho constante, chamadas com texto idêntico sempre retornam o mesmo JSON e não dependem de rede, localidade, relógio nem padrões da máquina.
Perguntas técnicas
O que acontece com um arquivo de uma linha?
Sem uma quebra LF ou CRLF, a capacidade retorna invalid_input porque não há estilo detectável.