Lignes uniques en conservant l'ordre
Collez alpha, beta, alpha, gamma, beta, une par ligne, et obtenez alpha, beta, gamma : chaque ligne reste là où elle est apparue d'abord et les 2 copies suivantes disparaissent. Rien n'est trié. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Texte
- alpha beta alpha gamma beta
- Texte
- alpha beta gamma
- Lignes
- alpha, beta, gamma
- Quantité
- 3
- Original
- alpha beta alpha gamma beta
Les listes réunies à la main contiennent presque toujours des répétitions : un SKU collé deux fois, une ligne de journal qui s'est redéclenchée, un nom classé recopié plus bas. Le réflexe tableur consiste à trier la colonne et à supprimer les jumeaux voisins, ce qui détruit en silence l'ordre qui rendait la liste utile. Conserver des lignes uniques sans les réordonner est le contrat inverse. Cet outil lit votre texte multiligne de haut en bas, conserve la première occurrence de chaque ligne à l'endroit où elle est apparue et écarte les copies exactes suivantes, de sorte qu'une liste de lecture classée, un journal des changements ou un inventaire de première vue reste dans la séquence que vous avez déjà choisie. Vous pouvez comparer les lignes après suppression des espaces entourants tout en gardant la première graphie d'origine.
Comment les lignes uniques gardent l'ordre de première apparition au lieu d'un tri
Préserver l'ordre tout en rendant une liste unique n'est pas la même chose que trier puis supprimer les voisins. Un pipeline trier-puis-uniciser réécrit le classement : le premier SKU que vous avez noté, la première erreur vue et le premier nom d'une liste de lecture sautent à la position alphabétique. Quiconque cherche des lignes uniques en conservant l'ordre veut le contrat inverse.
Ce moteur parcourt le fichier de la première ligne à la dernière, mémorise chaque ligne dès sa première apparition, écarte les copies exactes suivantes et laisse les survivantes dans cette séquence de première vue. Il découpe sur CR, LF et CRLF afin que les dumps Windows, Unix et ancien Mac se comparent équitablement. Chaque ligne est candidate telle qu'écrite, y compris une première ligne vide s'il en existe une.
L'appartenance utilise par défaut une clé de chaîne exacte, donc les espaces finaux et la casse comptent. Lorsque trim vaut true, la clé d'appartenance est la ligne sans espaces de tête ni de queue, mais le texte conservé reste la première graphie originale que vous avez saisie. Il n'y a ni collation de locale, ni distance d'édition floue, ni réécriture de la dernière occurrence.
Utilisez cette page lorsque l'ordre fait partie du sens. Utilisez un outil de tri de lignes si vous voulez A–Z. Utilisez une déduplication insensible à la casse lorsque Apple et apple doivent fusionner.
Cette landing sert les listes uniques de première vue qui ne doivent pas être réordonnées.
Où une liste unique de première vue justifie sa place
Les développeurs qui nettoient des extraits de journal et des historiques de shell ont besoin d'une liste unique de première occurrence avant de la coller dans des tickets, sans envoyer l'erreur la plus précoce au milieu alphabétique du fichier. Les équipes produit et merchandising exportent une colonne de SKU classés en texte brut et veulent des valeurs uniques qui conservent l'ordre commercial pour lequel elles se sont déjà battues.
Les éditeurs de listes de lecture, les auteurs de journaux des changements et les rédacteurs de programmes replient les répétitions accidentelles du copier-coller tout en laissant intacte la séquence prévue. Les administrateurs fusionnent des listes d'autorisation de plusieurs sources et ont besoin d'un ensemble unique déterministe qui ne réordonne pas les entrées de confiance déjà présentes. Les enseignants construisent des listes de vocabulaire ou de corrigé sans répétitions accidentelles du presse-papiers.
Si plus tard vous avez besoin d'un tri alphabétique, d'un repli insensible à la casse, d'une déduplication CSV par clés de colonnes ou d'une fusion sémantique floue de lignes presque doubles, traitez-les comme des intentions de recherche et des landings distinctes plutôt que de surcharger cette page lignes-uniques-ordre-conservé.
Cas d’usage
Garder uniques des listes classées sans les retrier
Collez un classement merchandising, une liste de lecture ou une file de priorité et écartez les copies suivantes tandis que l'ordre de première vue reste exactement là où vous l'avez placé.
Nettoyer journaux et historiques dans l'ordre de première apparition
Repliez les lignes de journal ou d'historique de shell répétées pour des tickets courts, et laissez l'occurrence la plus précoce en tête plutôt que de trier alphabétiquement.
Questions fréquentes
Comment fonctionnent les lignes uniques qui conservent l'ordre ?
Le moteur découpe votre texte sur CR, LF ou CRLF, conserve la première occurrence de chaque ligne et écarte les copies suivantes. Les survivantes restent en ordre de première vue. Rien n'est trié.
Quelle est la différence avec un tri de lignes uniques ?
Trier puis uniciser réécrit le classement en ordre A–Z. Cet outil ne trie jamais : la première fois qu'une ligne apparaît est la position qu'elle garde. Utilisez un outil de tri de lignes si vous voulez une sortie alphabétique.
Que change l'option trim ?
Lorsque trim vaut true, les lignes qui ne diffèrent que par des espaces en tête ou en queue comptent comme la même ligne. Le texte conservé reste la première graphie originale que vous avez saisie, y compris ces espaces.
Que se passe-t-il si text manque ou est vide ?
Une case vide est traitée comme une erreur client, non comme une liste unique vide réussie.
Apple et apple sont-elles la même ligne ?
Non. Les lignes sont comparées à l'identique : une différence de majuscules en fait deux lignes distinctes, et les deux sont conservées. Si la casse ne doit pas compter, uniformisez-la avant.
Outils associés
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/str/unique-lines-ordered \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"alpha\nbeta\nalpha\ngamma\nbeta"}'const res = await fetch("https://api.kit.forhosting.com/str/unique-lines-ordered", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "alpha\nbeta\nalpha\ngamma\nbeta"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/unique-lines-ordered",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "alpha\nbeta\nalpha\ngamma\nbeta"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/unique-lines-ordered", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"alpha\\nbeta\\nalpha\\ngamma\\nbeta"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"alpha\nbeta\nalpha\ngamma\nbeta"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/unique-lines-ordered", 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
{
"text": "alpha\nbeta\nalpha\ngamma\nbeta"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.unique_lines_ordered",
"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_chars | 65536 |
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. |
Notes techniques
Une entrée vide est rejetée avec invalid_input plutôt qu'une chaîne vide silencieuse, ce qui protège les clients qui ont oublié de lier un champ. Les appels API réussis coûtent $0.002 par élément.
Comment les lignes uniques gardent l'ordre de première apparition au lieu d'un tri
Le parcours est un unique passage linéaire avec un ensemble de hachage, donc un texte et des options identiques produisent toujours le même JSON que vous pouvez figer dans les tests.
Ce que vous envoyez, ce que vous recevez et le comportement des erreurs
Envoyez un champ obligatoire nommé text contenant la chaîne multiligne non vide à uniciser. Envoyez éventuellement trim comme booléen ou sous les formes de chaîne courantes true, false, yes, no, one ou zero. Lorsque trim est omis, il vaut false : la comparaison est exacte, y compris les espaces entourants. Les alias input, value, s, content, body et lines sont acceptés lorsque d'anciens clients ou des générateurs de formulaires emploient ces noms. Un text manquant, une valeur non chaîne ou une chaîne de longueur nulle déclenchent invalid_input avec un message qui nomme le champ, et ces échecs ne sont pas facturés. En cas de succès, la réponse renvoie text comme les lignes uniques jointes par un saut de ligne, lines comme la même liste unique en tableau, count comme le nombre de lignes uniques restantes, original comme écho de l'entrée, original_count comme le nombre de lignes découpées avant unicisation, removed comme le nombre de copies suivantes écartées, first_positions comme les index source en base un de chaque ligne conservée, l'indicateur trim résolu et method égal à unique_lines_ordered. Les contrôles classiques comprennent une liste de fruits classée avec banana et apple répétées qui se réduit à trois lignes uniques dont les first_positions pointent vers les rangs d'origine, une liste rembourrée d'espaces qui se resserre davantage lorsque trim vaut true, et une seule ligne unique qui traverse inchangée avec removed égal à zéro. Les charges extrêmement longues au-dessus du plafond de caractères documenté échouent avec invalid_input afin qu'une seule requête ne monopolise pas la mémoire. Le tarif des appels API réussis est la base publiée de $0.002 par élément.
Où une liste unique de première vue justifie sa place
Comme cette capacité est un moteur parse pur, le tarif API est la base publiée de $0.002 par élément réussi et une validation en échec ne consomme pas le solde. Gardez les charges à des tailles de document ordinaires adaptées à un isolat Worker, pas à des dumps d'entrepôt de plusieurs mégaoctets.
Cas d'intégration
Construire des fixtures stables à partir d'exports brouillons
Transformez un dump en texte brut d'URL, de SKU ou de courriels en une liste de lignes uniques pour la CI, avec first_positions reliant chaque survivante à sa rangée source.
Questions techniques
Combien coûtent les lignes uniques qui conservent l'ordre ?
L'outil navigateur est gratuit. Les requêtes API utilisent le solde KIT prépayé à $0.002 par appel réussi ; une entrée invalide n'est pas facturée.