Einzelnen Beitrag anzeigen

Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: "Natürliche" Sortierungen von Strings

  Alt 4. Apr 2006, 14:54
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
 
 // ...
Angehängte Dateien
Dateityp: zip strnatcmp4delphi_448.zip (4,9 KB, 92x aufgerufen)
  Mit Zitat antworten Zitat