Hej,
Mam taki dziwny problem...
Otóż mam plik (w formacie INI), który zawiera date (zapisaną jako liczba - Integer).
Chciałbym uporządkować te dane wg daty (rosnąco albo malejąco).
[EE61B863306341DEB3FACB7C5085226C]
Date=47174
[CCCCB86A306341DEB3F1CB7C5085226C]
Date=43174
[FF61B86A306341DEB3F1CB7C5085226C]
Date=43074
[AAAAB86A306341DEB3F1CB7C5085226C]
Date=45174
[BBBBB86A306341DEB3F1CB7C5085226C]
Date=45174
Czyli otrzymać posortowaną listę nazw sekcji (wg daty):
Dlaczego tak? Ponieważ potem będę mógł czytać odpowiednie dane wg danej sekcji.
Jak się do tego zabrać, żeby zrobić to szybko i prosto?
Czy poniższe ma sens i jest prawidłowe?
function MySortFunc(List: TStringList; Index1, Index2: Integer): Integer;
var
s1, s2: string;
begin
// EDIT -> to chyba eliminuje GUIDy, bo czytam tylko Daty
s1 := List.Names[Index1];
s2 := List.Names[Index2];
//s1 := List[Index1]; -> tu byl caly wpis Data=GUID
//s2 := List[Index2];
Result := CompareText(s1, s2);
end;
SL_SORT_LIST := TStringList.Create;
try
// Przykladowa lista z danymi (Data = Nazwa Sekcji)
SL_SORT_LIST.Delimiter := '='; // EDIT
SL_SORT_LIST.Add('47174' + '=' + 'EE61B863306341DEB3FACB7C5085226C');
SL_SORT_LIST.Add('43174' + '=' + 'CCCCB86A306341DEB3F1CB7C5085226C');
SL_SORT_LIST.Add('43074' + '=' + 'FF61B86A306341DEB3F1CB7C5085226C');
SL_SORT_LIST.Add('45174' + '=' + 'AAAAB86A306341DEB3F1CB7C5085226C');
SL_SORT_LIST.Add('45174' + '=' + 'BBBBB86A306341DEB3F1CB7C5085226C');
SL_SORT_LIST.CustomSort(MySortFunc);
ShowMessage(SL_SORT_LIST.Text); // wynik
finally
SL_SORT_LIST.Free;
end;
Teoretycznie sortowane są wpisy - ale, czy Nazwy sekcji (te GUIDy) nie mają wpływu na wynik? Jeśli tak, to jak je zignorować (czy zmiana EDIT poprawia sytuacje?)?
Wynik:
43074=FF61B86A306341DEB3F1CB7C5085226C
43174=CCCCB86A306341DEB3F1CB7C5085226C
45174=AAAAB86A306341DEB3F1CB7C5085226C
45174=BBBBB86A306341DEB3F1CB7C5085226C
47174=EE61B863306341DEB3FACB7C5085226C
Proszę o podpowiedzi,
Słaby jestem z sortowania, wręcz beznadziejny... więc proszę o wyrozumiałość...
-Pawel