Ma volt egy kis időm és kipróbáltam a következő pofon egyszerű dolgot... és láss csodát a TStringList-ben elhelyezett betűk a magyar ábécének megfelelően lettek sorba rendezve (Linux, LANG=hu_HU.UTF-8).
(Windows-on nem próbáltam, de az eredmény minden bizonnyal azonos lesz, mivel a Lazarus UTF-8 kódolást használ)
var
SL:TStringList;
I:Integer;
{
// A WideStrinManager is valószínűleg ugyanezt csinálja, az eredmény legalábbis ugyanaz. Lásd az SL.Sort(..) és az SL.CustomSort(...) hívásokat lentebb (utóbbit megjegyzésben)...
function UTF8Osszehasonlitas(List: TStringList;Index1: Integer;Index2: Integer):Integer;
begin
Result:=UTF8CompareStrCollated(List[Index1],List[Index2]);
end;
}
begin
SL:=TStringList.Create;
SL.Add('a');
SL.Add('á');
SL.Add('e');
SL.Add('é');
SL.Add('i');
SL.Add('í');
SL.Add('o');
SL.Add('ó');
SL.Add('ö');
SL.Add('ő');
SL.Add('u');
SL.Add('ú');
SL.Add('ü');
SL.Add('ű');
// a fentebbi magánhangzókat az alábbi mássalhangzók közé helyesen kell besorolnia a .Sort eljárásnak
SL.Add('b');
SL.Add('c');
SL.Add('d');
SL.Add('f');
SL.Add('g');
SL.Add('h');
SL.Add('j');
SL.Add('k');
SL.Add('l');
SL.Add('m');
SL.Add('n');
SL.Add('p');
SL.Add('q');
SL.Add('r');
SL.Add('s');
SL.Add('t');
SL.Add('v');
SL.Add('w');
SL.Add('x');
SL.Add('y');
SL.Add('z');
SL.Sort;
// SL.CustomSort(@UTF8Osszehasonlitas); // Lásd az UTF8Osszehasonlitas eljárást megjegyzésben fentebb...
for I:=0 to SL.Count-1 do WriteLn(SL[I]);
SL.Free;
end.
Kis és nagybetűk használata esetén a TStringList.CaseSensitive szükség szerinti beállítása hasznos lehet.