NaturalSort/fr

From Lazarus wiki
Jump to navigationJump to search

English (en) français (fr)

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
 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).

    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) :
    1
    1.1.1
    1.1.2
    1.2.1
    1.99.99
    2
Tri des entiers (stNatural) :
    0
    00
    000
    1
    2
    10
Tri des adresses IP (stNatural) :
    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) :
    0,99
    1
    1,01
    1,99
    2
Nombres avec milliers séparés (stFloatThousand) :
    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 :

     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 :

 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 :

 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 :

 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.