Einzelnen Beitrag anzeigen

Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#2

AW: Intelligentes BubleSort; sortieren wie im Windows Explorer

  Alt 17. Apr 2012, 05:22
Ich finde es eleganter, die Methode "CustomSort" einer TStringList zu nehmen und eine Ordnungsfunktion für die zu sortierenden Strings anzugeben.
Delphi-Quellcode:
program Project8;

{$APPTYPE CONSOLE}

uses
  Classes, SysUtils;

Var
  s : TStringList;

  Procedure SplitName (s : String; Var prefix : String; Var number : Integer; Var postfix : String);
  Var
    i,j : Integer;

  Begin
    prefix := '';
    number := 0;
    postfix := '';
    i := 1;
    while (i<=length(s)) and Not (s[i] in ['0'..'9']) do inc(i);
    prefix := Trim(Copy(s,1,i-1));
    j:=i;
    while (i<=length(s)) and (s[i] in ['0'..'9']) do inc(i);
    if i>j then number := StrToInt(Copy(s,j,i-j));
    postfix := Trim(Copy(s,i,maxint));
  End;

  Function SortSmartFilenames(List: TStringList; Index1, Index2: Integer): Integer;
  Var
    s1,s2,q1,q2 : String;
    n,m : Integer;

  Begin
    SplitName(List[Index1],s1,N,s2);
    SplitName(List[Index2],q1,m,q2);
    result := CompareText(s1,q1);
    if result=0 then
      result := N-m;
    if result=0 then
      result := compareText(s2,q2);
  End;

begin
  s := TStringlist.Create;
  s.Add('Text');
  s.Add('Text 2');
  s.Add('Text 10');
  s.Add('Text 1');
  s.Add('Text 1 post');
  s.CustomSort(SortSmartFilenames);
  writeln(s.text);
  s.free;
  readln;
end.
  Mit Zitat antworten Zitat