Registriert seit: 11. Jun 2011
313 Beiträge
|
AW: Intelligentes BubleSort; sortieren wie im Windows Explorer
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.
|
|
Zitat
|