Folgende Ergänzung stammt von
KingIR.
Im Wesentlichen wurde ein Object File aus der originalen
C-Datei erstellt. Der selbe Code wird u.a. auch in den PHP-Funktionen strnatcmp() und natsort() verwendet. Das Object File kann jetzt mit folgendem Code ins eigene Projekt gelinkt werden:
Delphi-Quellcode:
{$INCLUDE 'CHelpers.pas'}
{$LINK 'strnatcmp.obj'}
function _strnatcmp(const a, b: PChar): Integer; cdecl; external;
function _strnatcasecmp(const a, b: PChar): Integer; cdecl; external;
function NatCompareText(const S1, S2: String): Integer;
begin
Result := _strnatcasecmp(PChar(S1), PChar(S2));
end;
function NatCompareStr(const S1, S2: String): Integer;
begin
Result := _strnatcmp(PChar(S1), PChar(S2));
end;
Die Datei CHelpers.pas ist in der angehängten ZIP-Datei enthalten. Um nun eine TStringList "natürlich" zu sortieren, geht man z.B. folgendermaßen vor:
Delphi-Quellcode:
uses strnatcmp;
// ...
function Compare_NaturalSort(List: TStringList; Index1, Index2: Integer): Integer;
begin
Result := NatCompareText(List[Index1], List[Index2]);
end;
// ...
var
FileNames: TStringList;
// ...
FileNames.CustomSort(Compare_NaturalSort); // apply natural sorting
// ...