Copie du wikimiroir

Ceci est un miroir du wiki de pascal.chat. La modification, l’historique et la connexion se trouvent là-bas.

NaturalSort/fr

English · Français

A propos

Le tri naturel est un classement de chaînes e caractères en ordre alphabétique, sauf que les nombres à plusieurs chiffres sont ordonnés comme un caractère simple. L'ordre de tri naturel a été présenté plus convivial ("naturel") que le pur ordre alphabétique orienté machine.

Par exemple, dans un tri alphabétique "z11" sera placé devant "z2" parce "2" est pris pour plus grand que "1", alors qu'avec le tri naturel "z2" sera placé avant "z11" car "2" est considéré plus petit que "11".

La possibilité de trier selon l'ordre naturel est disponible dans plusieurs langages et bibliothèques.

Auteurs

Antônio Galvão et Rik van Kekem

Plateformes

Linux et Windows.

Propriétés

Deux types de tri
pascal
 type
   TSortType = (stNatural, stFloatThousand);

Le numéros thématiques, entiers et adresses IP sont triés par le type de tri stNatural. Les milliers avec séparateurs et les nombres en virgule flottante sont triés par le type de tri stFloatThousand. Les deux font l'ordre alphabétique collationné et trient les nombres internes dans des chaînes alphabétiques.

Tri alphabétique collationné (stNatural ou stFloatThousand) :

Parties alphabétiques tri par OS (Windows or Linux).

text
    0o3ö6ãrõxögùmî1ó5egõ
    1I8iuã0u4ô8EeU7öuOkü
    3â0á0e6ùsunueUtö8írò
    3áiokúdùsétöbïqãkôvI
    4õ4îcë4ò0à1ólOaUpáxã
    5î2ãgâoí8î4ü1ò3ïwowë
    5úrüqUfò5u0íyïfü5âlí
Tri des numérateurs thématiques (stNatural) :
text
    1
    1.1.1
    1.1.2
    1.2.1
    1.99.99
    2
Tri des entiers (stNatural) :
text
    0
    00
    000
    1
    2
    10
Tri des adresses IP (stNatural) :
text
    10.145.254.9
    10.145.255.9
    10.145.255.10
    10.146.254.9
    121.243.100.0
    255.255.255.254
Tri des nombres en virgule flottante (stFloatThousand) :
text
    0,99
    1
    1,01
    1,99
    2
Nombres avec milliers séparés (stFloatThousand) :
text
    1.198
    1.199
    1.199,50
    1.200
    1.201
    1.101.300

Les séparateurs de milliers et le séparateur décimal sont ceux par défaut du système.

C'est rapide. Voyez le temps comparé à d'autres fonctions :

text
     StrCmpLogicalW: 1
    WideCompareText: 1,238
        NaturalSort: 0,746

Téléchargement

La dernière version est disponible là : http://sourceforge.net/projects/lazarusfiles/files/naturalsort.zip/download

Un projet de démo est inclus.

Fonctions and Procédures

procedure NaturalSort(aList: TStrings; SortType: TSortType);

Cette procédure fournit une façon de trier une liste de chaînes directement, selon le type de tri choisi, stFloatThousand (pour le tri des nombres flottants et des nombres à séparateurs de milliers ou stNatural (pour tous les autres tris supportés).

Exemple d'emploi :

pascal
 procedure TForm1.Button1Click(Sender :TObject);
 begin
   NaturalSort(Memo1.Lines, stNatural); 
   NaturalSort(Memo2.Lines, stFloatThousand); 
 end;

function UTF8NaturalCompareList(aList: TStringList; Index1, Index2: Integer): Integer;

Exemple d'emploi :

pascal
 procedure NaturalSort(aList: TStrings);
 var
   L: TStringList;
 begin
   L := TStringList.Create;
   try
     L.Assign(aList);
     L.CustomSort(@UTF8NaturalCompareList);
     aList.Assign(L);
   finally
     L.Free;
   end;
 end;

function UTF8FloatThousandCompareList(aList: TStringList; Index1, Index2: Integer): Integer;

Exemple d'emploi :

pascal
 procedure FloatThousandSort(aList: TStrings);
 var
   L: TStringList;
 begin
   L := TStringList.Create;
   try
     L.Assign(aList);
     L.CustomSort(@UTF8FloatThousandCompareList);
     aList.Assign(L);
   finally
     L.Free;
   end;
 end;

Function UTF8FloatThousandCompareText(const S1, S2: string): Integer;

Function UTF8LogicalCompareText(const S1, S2: string): Integer;

Function UTF8NaturalCompareText(const S1, S2: string): Integer;

Contrôles avec tri naturel

Une TNaturalListBox et une TNaturalComboBox sont fournies dans le projet de démo.


From the Free Pascal wiki, page "NaturalSort/fr", as it stood on 2016-11-17 after a change by E-ric, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Version 2, dernière modification par WikiArchive .