Hier mein Algorithmis:
Delphi-Quellcode:
procedure TContactClass.Sort(
Handle: THandle; Ascending: Boolean);
var
RecordCount: Cardinal;
RecordList: TContactList;
Record1, Record2: TContactRec;
s, s1, s2:
string;
i, j: Integer;
begin
RecordCount := FXMLFile.RecordCount;
SetLength(RecordList, RecordCount);
RecordList := GetContacts;
for i := RecordCount-1
downto 1
do
begin
for j := 1
to i
do
begin
//writeln(j);
if j
mod 10 = 0
then
ProcessMessages(
Handle);
SetWindowText(
Handle, PChar(IntToStr(i)));
Record1 := RecordList[j - 1];
Record2 := RecordList[j];
s1 := Record1.
Name + '
' + Record1.Vorname;
s2 := Record2.
Name + '
' + Record2.Vorname;
//if Ascending then
if s1 > s2
then
begin
Swap(Record1, Record2);
EditContact(Record2.ID, Record1);
EditContact(Record1.ID, Record2);
end;
end;
end;
end;
Reihenfolge der Datensaätze vorher: d c b a
Nachher: c d c b
In dem Array RecordList stehen alle Datensätze drin, wie sie aus der
XML-Datei kommen. Swap vertauscht zwei Datensätze und EditContact änder den Datensatz mit der angegebenen ID mit den Daten von dem angegebenen Record. In dieser Prozedur wird bisher auch jedesmal die
XML-Datei gespeichert.
Das komische ist, in einer Anwendung mit typisierten dateien tut es die Implementation wunderbar nur hier mir
XML-Dateien scheint es nicht zu klappen.