Trieur de Lignes et Suppresseur de Doublons

Triez des lignes de texte de A à Z ou de Z à A, supprimez les doublons et les lignes vides, et corrigez l'ordre numérique naturel pour que item2 précède item10 — instantanément, dans le navigateur.

214 vues

Pourquoi « item10 » se classe avant « item2 » dans un tri alphabétique simple

Un tri standard — celui qui se cache derrière la méthode Array.sort() en JavaScript ou le bouton A→Z d'un tableur — compare deux lignes caractère par caractère, de gauche à droite, en utilisant le point de code Unicode de chaque caractère. Il ne considère jamais une suite de chiffres comme un nombre entier ; il se contente de demander si un caractère est plus petit ou plus grand qu'un autre, position par position. C'est pourquoi une liste contenant item1, item2, item9, item10 et item20 se trie, caractère par caractère, en item1, item10, item2, item20, item9 : en comparant « item10 » et « item2 » lettre par lettre, les chaînes sont identiques jusqu'à « item », et le caractère suivant décide de tout — « 1 » contre « 2 ». Comme le caractère « 1 » est plus petit que le caractère « 2 », item10 se classe avant item2, même si dix est numériquement plus grand que deux. Toute liste où des nombres apparaissent dans du texte souffre de ce problème : numéros de version, noms de fichiers comme image2.jpg et image10.jpg, numéros de facture, instructions étape par étape.

Le tri naturel — aussi appelé tri numérique — corrige cela en reconnaissant une suite de chiffres consécutifs comme un seul nombre et en comparant sa valeur plutôt que de comparer les chiffres un par un. L'option de tri naturel de cet outil délègue cette logique à l'API Intl intégrée au navigateur, en exécutant a.localeCompare(b, undefined, {numeric: true, sensitivity: "base"}) sur chaque paire de lignes. Le drapeau numeric:true indique à la comparaison de détecter les suites de chiffres et de les traiter comme des nombres, de sorte qu'item2 se place correctement avant item10, et item9 avant item20 — l'ordre qu'un lecteur humain attendrait, pas celui que produit une comparaison caractère par caractère.

Une comparaison sensible à la langue, pas seulement aux codes de caractères

L'ordre alphabétique dépend aussi des règles de la langue appliquée, et c'est là qu'une comparaison simple échoue même sans aucun nombre en jeu. En anglais, « a » et « A » sont la même lettre sous deux casses, et les lettres accentuées comme é sont généralement classées près du e. Le turc, en revanche, traite « ı » (i sans point) et « i » (i avec point) comme deux lettres distinctes ayant chacune leur propre place dans l'alphabet — une distinction qu'une comparaison brute de points de code, qui ne vérifie que des valeurs Unicode numériques, n'a aucun moyen de connaître. localeCompare, la même méthode Intl derrière l'option de tri naturel, prend en compte les règles de la langue : avec sensitivity: "base", elle traite les différences de casse et d'accent comme équivalentes pour le classement tout en respectant l'ordre réel des lettres de chaque alphabet, qu'il s'agisse de l'anglais, du turc, de l'allemand ou d'une autre langue à écriture latine.

Cet outil combine les deux enjeux en une seule passe : choisissez l'ordre de base alphabétique A→Z ou Z→A, superposez éventuellement un tri numérique naturel pour que les nombres intégrés se comparent par valeur plutôt que par chiffre, puis supprimez éventuellement les lignes en double, les lignes vides et les espaces en début ou en fin de ligne. Comme la détection des doublons compare les lignes en tant que chaînes exactes, le nettoyage des espaces compte : « apple » et « apple » avec une espace finale semblent différentes à un contrôle de doublon tant que l'espace finale n'a pas été retirée au préalable — c'est pourquoi les options de nettoyage et de suppression des doublons sont conçues pour fonctionner ensemble plutôt que comme des interrupteurs indépendants.

Questions fréquentes

Pourquoi « item10 » apparaît-il avant « item2 » quand je trie ma liste ?

Parce qu'un tri alphabétique simple compare le texte caractère par caractère plutôt que de traiter les suites de chiffres comme des nombres entiers — le caractère « 1 » est plus petit que « 2 », donc item10 gagne cette comparaison à une seule position même si dix est plus grand que deux. Activez le tri naturel ou numérique pour corriger cela : il détecte les chiffres consécutifs comme un seul nombre et compare la grandeur plutôt que les caractères individuels.

Qu'est-ce qui compte exactement comme une ligne « en double » ?

Deux lignes ne sont considérées comme des doublons que si elles correspondent exactement, caractère pour caractère, y compris la casse et les espaces en début ou en fin de ligne — « Apple » et « apple » sont traitées comme des lignes différentes, tout comme « banana » et « banana » avec une espace finale. Activez l'option de nettoyage avant de supprimer les doublons si les différences d'espacement doivent être ignorées.

Le nettoyage des espaces change-t-il le nombre de doublons supprimés ?

Oui. Si deux lignes par ailleurs identiques ne diffèrent que par des espaces en début ou en fin de ligne, elles comptent comme des lignes séparées tant qu'elles n'ont pas été nettoyées. Cocher « supprimer les espaces en début et fin de ligne » normalise les deux lignes avant que le contrôle des doublons ne s'exécute, de sorte que ces lignes quasi identiques fusionnent en une seule.

localeCompare est-il fiable pour trier du texte non anglais, comme le turc ou l'allemand ?

Oui — localeCompare est une fonction native du navigateur conçue spécifiquement pour un classement correct selon la langue ; elle sait par exemple que le turc traite le « i » avec point et le « ı » sans point comme des lettres distinctes, et gère généralement les caractères accentués comme s'y attendrait un lecteur de cette langue, ce qu'une simple comparaison « inférieur à » fondée sur des points de code Unicode bruts ne peut pas faire.

Cet outil téléverse-t-il ou stocke-t-il mon texte quelque part ?

Non — tout s'exécute localement dans le navigateur avec JavaScript ; les lignes ne sont jamais envoyées à un serveur, enregistrées ou journalisées. Actualiser ou fermer l'onglet efface entièrement la saisie.

Commentaires

Pas encore de commentaires — soyez le premier à en écrire un !

Outils similaires