Difference between revisions of "NaturalSort"

From Lazarus wiki
Jump to navigationJump to search
Line 42: Line 42:
 
Alpha sorting task made by OS (Windows or Linux).
 
Alpha sorting task made by 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ã
 
     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í
 
     5úrüqUfò5u0íyïfü5âlí
    dïqò8ïuíuü7éyãsãháhî
 
    7úbê7énú0ihôdôhâoUuU
 
    5î2ãgâoí8î4ü1ò3ïwowë
 
    séxâkà4ó2á6ö0Ioêoü2e
 
    1I8iuã0u4ô8EeU7öuOkü
 
    3â0á0e6ùsunueUtö8írò
 
    eEoüxînò8êje1ê4ü6I0à
 
  
 
===== Thousand separated numbers sort: =====
 
===== Thousand separated numbers sort: =====

Revision as of 22:23, 25 May 2015

Template:Translate

About

Natural sort order is an ordering of strings in alphabetical order, except that multi-digit numbers are ordered as a single character. Natural sort order has been promoted as being more human-friendly ("natural") than the machine-oriented pure alphabetical order.

For example, in alphabethical sorting "z11" would be sorted before "z2" because "2" is sorted as smaller than "1", while in natural sorting "z2" is sorted as smaller than "z11" because "2" is sorted as smaller than "11".

Functionality to sort by natural sort order is built into many progamming languages and libraries.

Authors

Antônio Galvão and Rik van Kekem

Platforms

Linux and Windows.

Features

1) Topic enumerators sort till 99 subtopics:
    1
    1.1.1
    1.1.2
    1.2.1
    1.99.99
    2
2) Integers sort:
    0
    00
    000
    1
    2
    10
3) Floating point numbers sort:
    0,99
    1
    1,01
    1,99
    2
Collated alpha sort:

Alpha sorting task made by 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í
Thousand separated numbers sort:
    1.198
    1.199
    1.199,50
    1.200
    1.201
    1.101.300
IP addresses sort:
    10.145.254.9
    10.145.255.9
    10.145.255.10
    10.146.254.9
    121.243.100.0
    255.255.255.254

Thousand and decimal separators are the system default ones.

It is fast. See the time against other functions:

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

Download

The latest version is available here: http://sourceforge.net/projects/lazarusfiles/files/naturalsort.zip/download

A demo project is included.

Functions and Procedures

procedure NaturalSort(aList: TStrings);

Example of usage:

 procedure TForm1.Button1Click(Sender :TObject);
 begin
   NaturalSort(Memo1.Lines);
 end;

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

Example of usage:

 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 UTF8LogicalCompareText(const S1, S2: string): Integer;

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

Natural sort Controls

A TNaturalListBox and a TNaturalComboBox are provided along with the demo project.