Comparador de textos línea por línea
El comparador de diferencias por líneas enfrenta un texto original con una versión revisada y presenta el resultado en el orden de lectura.
Ejecutar — gratis
Cada línea queda marcada como añadida, eliminada o sin cambios, junto con el número que le corresponde en cada versión. Sirve para revisar ediciones, comprobar archivos generados, validar cambios de configuración y entender con precisión qué distingue una versión de otra. La comparación es determinista, no accede a la red y trata de forma uniforme los finales de línea de Windows, Mac clásico y Unix.
Prepare las dos versiones para obtener una comparación útil
Coloque la versión anterior en el campo de texto original y la posterior en el campo de texto revisado. El comparador examina líneas completas, por lo que importan la puntuación, las mayúsculas, los espacios y cualquier otro carácter. Si cambia un solo carácter, la línea aparece primero como eliminada y después como añadida. Este comportamiento mantiene la fidelidad de una revisión por líneas y evita presentar dos líneas distintas como si no hubieran cambiado. Antes de comparar se normalizan los finales de línea, de modo que puede enfrentar contenido procedente de Windows, Unix o Mac antiguo sin diferencias falsas causadas únicamente por los retornos de carro. Las líneas en blanco dentro del documento conservan su significado y pueden figurar como añadidas, eliminadas o intactas. Si el documento termina con un salto de línea, la línea vacía final también participa en la comparación. Para facilitar la revisión, procure no mezclar cambios generales de formato con modificaciones sustantivas, ya que un reformateo amplio genera naturalmente más diferencias aunque las ideas sigan siendo parecidas.
Interprete los estados, los números de línea y el resumen
El resultado sigue el orden necesario para reconstruir el paso de la versión original a la revisada. Una entrada sin cambios incluye los números de línea antiguo y nuevo porque esa línea exacta existe en ambos textos. Una entrada eliminada solo incluye su número anterior, mientras que una añadida solo muestra el nuevo. La ausencia de esos campos es deliberada: una línea añadida no ocupa ningún lugar en el documento antiguo y una eliminada no lo ocupa en el nuevo. Los recuentos del resumen permiten medir rápidamente la edición, y la lista detallada aporta la evidencia de cada total. El indicador de igualdad solo es verdadero cuando no hay adiciones ni eliminaciones. Las líneas repetidas pueden admitir varias alineaciones matemáticamente válidas. Para mantener una salida estable, el comparador aplica una regla fija de desempate y prefiere una eliminación cuando dos alineaciones conservan el mismo número de líneas intactas. Así, las mismas entradas producen siempre la misma secuencia, una propiedad útil para pruebas y revisiones automatizadas.
Utilice las diferencias con seguridad en revisiones y automatizaciones
La comparación por líneas resulta especialmente útil cuando importa la estructura, por ejemplo en código fuente, configuraciones, notas de versión, listas, políticas, instrucciones y registros exportados. En una revisión humana, empiece por el resumen y examine después cada pareja de líneas eliminadas y añadidas dentro de su contexto. En una automatización, consulte el indicador de igualdad para decidir con rapidez y conserve el detalle cuando necesite una pista de auditoría o un informe explicativo. La herramienta no determina si una edición es correcta, no fusiona cambios incompatibles ni calcula similitud semántica. Expone relaciones textuales exactas para que una persona u otra regla determinista tome esa decisión. Ambas entradas tienen límites para asegurar una ejecución previsible y se comparan íntegramente en memoria, sin servicios externos. Cada uso de la API cuesta $0.002. Si procesa muchos archivos, compare cada pareja por separado y conserve en su flujo los nombres o identificadores de versión, pues esta capacidad recibe texto y no metadatos del repositorio. Para material sensible, respete las condiciones de conservación y transporte del canal utilizado.
Qué puede hacer con ella
Revisar cambios de configuración
Compare la configuración antigua con la propuesta para identificar cada línea exacta que una actualización inserta o elimina.
Validar resultados generados
Contraste un manifiesto, informe o fragmento de código recién generado con una versión esperada conocida dentro de un flujo automatizado.
Explicar revisiones documentales
Cree un registro estructurado de cambios para políticas, notas de versión, instrucciones u otros documentos organizados por líneas.
Preguntas frecuentes
¿Qué significa cada estado?
Sin cambios indica que la línea exacta aparece en la alineación elegida de ambas versiones. Eliminada significa que solo existe en la original y añadida, que solo existe en la revisada.
¿Compara palabras dentro de una línea modificada?
No. La comparación se realiza deliberadamente por líneas. Una línea modificada aparece como eliminación y adición, lo que conserva un registro exacto e inequívoco.
¿Los distintos formatos de final de línea cuentan como cambios?
No. Los finales de línea de Windows, Unix y Mac clásico se normalizan antes de realizar la comparación.
¿Cómo se alinean las líneas idénticas repetidas?
El algoritmo conserva una secuencia común de líneas de longitud máxima y aplica un desempate estable que prefiere eliminar cuando existen alineaciones equivalentes.
¿Puedo utilizar el resultado en pruebas automatizadas?
Sí. El algoritmo no usa red, aleatoriedad ni valores dependientes del tiempo, por lo que las mismas entradas siempre producen el mismo JSON.
¿Cuánto cuesta una solicitud de API?
Cada solicitud de API cuesta $0.002. La versión para navegador puede ejecutar localmente la misma comparación determinista.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/str/diff-lines \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"before_text":"Apples\nBananas\nCherries","after_text":"Apples\nBlueberries\nCherries"}'const res = await fetch("https://api.kit.forhosting.com/str/diff-lines", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"before_text": "Apples\nBananas\nCherries",
"after_text": "Apples\nBlueberries\nCherries"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/diff-lines",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"before_text": "Apples\nBananas\nCherries",
"after_text": "Apples\nBlueberries\nCherries"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/diff-lines", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"before_text":"Apples\\nBananas\\nCherries","after_text":"Apples\\nBlueberries\\nCherries"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"before_text":"Apples\nBananas\nCherries","after_text":"Apples\nBlueberries\nCherries"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/diff-lines", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"before_text": "Apples\nBananas\nCherries",
"after_text": "Apples\nBlueberries\nCherries"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.diff_lines",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_chars_per_text | 200000 |
max_lines_per_text | 1000 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |