Comparez deux textes ligne par ligne
Comparez deux versions d’un texte sans examiner manuellement chaque ligne. Cet outil déterministe aligne les lignes identiques dans leur ordre d’origine, puis classe chaque résultat comme ajout, suppression ou élément inchangé.
Lancer gratuitement
Il convient aux fichiers de configuration, journaux, listes, brouillons et sorties générées dont les retours à la ligne ont un sens. La réponse structurée fournit les numéros disponibles et un résumé compact, faciles à exploiter lors d’une révision humaine ou dans un traitement automatisé.
Préparez les deux versions pour une comparaison pertinente
Placez la version de référence dans le champ original et celle que vous souhaitez examiner dans revised. Chaque retour à la ligne constitue une limite significative : conservez donc la mise en forme utile. Une phrase déplacée sur une autre ligne est signalée comme une suppression puis un ajout, même si ses mots restent identiques. Les fins de ligne Windows et Mac classiques sont normalisées avant la comparaison, ce qui évite de déclarer différents des contenus issus de systèmes distincts. Les espaces, majuscules, signes de ponctuation et lignes vides restent significatifs. Cette rigueur convient aux configurations, rapports générés et inventaires. Une version peut être vide pour montrer que toutes les lignes ont été ajoutées ou retirées. Si les deux sont vides, la requête renvoie une erreur. Envoyez directement des chaînes, pas des tableaux ni des objets. Le service ne tronque, ne réécrit et n’interprète pas votre contenu avant l’alignement.
Lisez le résultat ordonné ligne par ligne
La réponse contient un tableau lines ordonné et un résumé. Chaque entrée présente un statut et le texte exact de la ligne. Une entrée inchangée comprend original_line et revised_line, car elle existe dans les deux versions. Une suppression ne comporte que original_line, tandis qu’un ajout ne comporte que revised_line. Ces positions commencent à un et correspondent au texte source ; elles peuvent donc être affichées directement dans une interface de révision. Lorsqu’une ligne est remplacée, le résultat indique généralement une suppression puis un ajout : il n’existe aucun statut de remplacement distinct. Le résumé compte les ajouts, suppressions et lignes inchangées. L’alignement repose sur une plus longue sous-séquence commune, préserve l’ordre et empêche une petite insertion de faire paraître tout le document différent. Des lignes identiques répétées peuvent autoriser plusieurs alignements ; une règle stable privilégiant la suppression tranche les égalités et produit toujours le même JSON.
Exploitez les différences structurées dans vos automatisations
La comparaison par ligne est particulièrement utile lorsqu’un autre système doit agir sur la réponse. Un processus de déploiement peut comparer la configuration attendue à celle observée, bloquer une publication si des réglages protégés disparaissent et conserver le résultat comme preuve. Un outil éditorial peut mettre en évidence uniquement les ajouts et suppressions, tout en gardant les lignes intactes comme contexte. Une surveillance peut confronter des instantanés successifs, consulter d’abord le résumé et éviter toute alerte si rien ne change. Cette capacité est déterministe, n’utilise ni réseau ni modèle de langage et ne reformule jamais le contenu. Chaque requête API coûte $0.002 ; la page exécute aussi la même logique pure dans le navigateur. Il s’agit volontairement d’une comparaison par ligne, non d’une analyse sémantique : elle n’explique pas les motifs, n’ignore pas les espaces et ne compare pas les mots d’une ligne modifiée. Utilisez ses positions et statuts pour surligner, auditer, tester ou alerter.
Cas d’usage
Contrôler une configuration
Comparez une configuration proposée à la version déployée et affichez précisément les lignes ajoutées ou supprimées.
Vérifier une sortie générée
Confrontez un rapport récent à un résultat connu et utilisez le résumé pour repérer les changements inattendus.
Créer une révision éditoriale
Transformez deux brouillons structurés en lignes en éléments qu’une interface peut surligner avec des positions fiables.
Questions fréquentes
Que renvoie la comparaison ?
Elle renvoie un tableau ordonné des lignes ajoutées, supprimées et inchangées, accompagné du total de chaque statut.
Comment les lignes modifiées sont-elles représentées ?
Une modification apparaît sous la forme d’une suppression de l’ancienne ligne et d’un ajout de la nouvelle.
Les espaces sont-ils pris en compte ?
Oui. Les espaces et lignes vides sont conservés et comparés, mais les fins de ligne avec retour chariot sont normalisées.
Une entrée peut-elle être vide ?
Oui. Le texte non vide sera entièrement ajouté ou supprimé. Seules deux entrées vides provoquent une erreur.
Quel est le prix d’une requête API ?
Chaque requête API coûte $0.002. L’outil du navigateur exécute localement la même comparaison déterministe.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/text/diff-lines \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"original":"alpha\nbeta\ngamma","revised":"alpha\nbeta updated\ngamma"}'const res = await fetch("https://api.kit.forhosting.com/text/diff-lines", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"original": "alpha\nbeta\ngamma",
"revised": "alpha\nbeta updated\ngamma"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/text/diff-lines",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"original": "alpha\nbeta\ngamma",
"revised": "alpha\nbeta updated\ngamma"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/text/diff-lines", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"original":"alpha\\nbeta\\ngamma","revised":"alpha\\nbeta updated\\ngamma"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"original":"alpha\nbeta\ngamma","revised":"alpha\nbeta updated\ngamma"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/text/diff-lines", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"original": "alpha\nbeta\ngamma",
"revised": "alpha\nbeta updated\ngamma"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.diff_lines",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
max_tokens | 20000 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |