Kannst du vielleicht damit anfangen? Hier habe ich kurz ein Beispiel ohne string.compare gebastelt. Das funktioniert bei mir im Delphi 2007.
Delphi-Quellcode:
function MySortCompare(List: TStringList; Index1, Index2: Integer): Integer;
var
wStr1: WideString;
wStr2: WideString;
Flags: Dword;
begin
wStr1 := List[Index1];
wStr2 := List[Index2];
Flags := 9; // coDigitAsNumbers + coIgnoreCase
Result := CompareStringW(LOCALE_USER_DEFAULT, Flags, PWideChar(wStr1), Length(wStr1), PWideChar(wStr2), Length(wStr2)) - CSTR_EQUAL;
end;
procedure Tf_Tester.TestCustomSort;
var
SL: TStringList;
i: Integer;
begin
m_test.Clear;
SL := TStringList.Create;
try
SL.Add('2.6.1.csv');
SL.Add('4.5.csv');
SL.Add('4.9.1.csv');
SL.Add('1.3.csv');
SL.Add('2.3.csv');
SL.Add('2.6.2.csv');
SL.Add('1.7.csv');
SL.Add('4.9.2.csv');
SL.Add('1.6.csv');
SL.Add('2.8.csv');
SL.Add('2.6.3.csv');
SL.Add('4.8.csv');
SL.Add('2.12.csv');
SL.CustomSort(@MySortCompare);
for i := 0 to Pred(SL.Count) do begin
m_test.Lines.Add(SL[i]);
end;
finally
FreeAndNil(SL);
end;
end;
Zitat:
Das Ergebnis:
1.3.csv
1.6.csv
1.7.csv
2.3.csv
2.6.1.csv
2.6.2.csv
2.6.3.csv
2.8.csv
2.12.csv
4.5.csv
4.8.csv
4.9.1.csv
4.9.2.csv