Einzelnen Beitrag anzeigen

Carsten1234

Registriert seit: 9. Apr 2008
Ort: Vechelde
178 Beiträge
 
Delphi 8 Professional
 
#15

Re: Sortierung von Daten in Textdateien

  Alt 31. Aug 2009, 14:33
So, ich habe es jetzt gelöst.
Meine Ereignisliste, die ich vom Gerät bekommen, mit den beiden genannten "Indexen" versehe und auf HDD zwischen speichere, sieht (z.B.) so aus:
Delphi-Quellcode:
00772;25.11.09;12:44:22 ;;0;1;
00771;31.08.09;12:44:05 ;;0;2;
00771;31.08.09;12:44:06 ;;0;3;
00781;31.08.09;13:05:36 ;;0;4;
00782;31.08.09;13:05:36 ;;0;5;
00783;31.08.09;13:07:20 ;;0;6;
00784;30.09.09;13:07:11 ;;0;7;
00784;30.09.09;13:07:19 ;;0;8;
00784;30.09.09;13:07:26 ;;0;9;
00785;30.09.09;13:07:28 ;;0;10;
00786;31.08.09;13:07:28 ;;0;11;
00787;31.08.09;14:35:59 ;;0;12;
00788;31.08.09;14:35:59 ;;0;13;
00789;31.08.09;14:36:06 ;;0;14;
00790;31.08.09;14:41:36 ;;0;15;
00791;31.08.09;14:41:36 ;;0;16;
00792;31.08.09;14:41:46 ;;0;17;
00793;31.08.09;14:45:44 ;;0;18;
00794;31.08.09;14:45:44 ;;0;19;
00795;31.08.09;14:45:52 ;;0;20;
00722;19.08.09;02:28:57 ;;1;21;
00723;19.08.09;02:29:38 ;;1;22;
00724;19.08.09;02:29:47 ;;1;23;
00725;19.08.09;02:29:55 ;;1;24;
00726;19.08.09;02:30:08 ;;1;25;
Jeder Datensatz wird anhand der Semikolons aufgesplittet in ein Object:
Delphi-Quellcode:
  TOneEvent = class(TObject)
    Datum : Str;
    Uhrzeit : Str;
    (...)
    FileIndex : integer;
    DataSetIndex: integer;
  end;
Diese Objekte werden in einer TObjectList gespeichert.
Delphi-Quellcode:
  TEventList = class(TObjectList)
  (...)
  end;
Nach dem Füllen der TeventList wird eine selbstdefinierte Sort-Routine aufgerufen, die da lautet:
Delphi-Quellcode:
function SortEventList(Item1, Item2: pointer): Integer;
begin
// ***** FileIndex1 < FileIndex2
  if (TOneEvent(Item1).FileIndex < TOneEvent(Item2).FileIndex) then
  begin
    if (TOneEvent(Item1).DataSetIndex < TOneEvent(Item2).DataSetIndex) then
      Result:= -1
    else
    if (TOneEvent(Item1).DataSetIndex > TOneEvent(Item2).DataSetIndex) then
      Result:= 1
    else
      Result:= 0;
  end
  else
// ***** FileIndex1 > FileIndex2
  if (TOneEvent(Item1).FileIndex > TOneEvent(Item2).FileIndex) then
  begin
    if (TOneEvent(Item1).DataSetIndex < TOneEvent(Item2).DataSetIndex) then
      Result:= -1
    else
    if (TOneEvent(Item1).DataSetIndex > TOneEvent(Item2).DataSetIndex) then
      Result:= 1
    else
      Result:= 0;
  end
  else
// ***** FileIndex1 = FileIndex2
  if (TOneEvent(Item1).FileIndex = TOneEvent(Item2).FileIndex) then
  begin
    if (TOneEvent(Item1).DataSetIndex < TOneEvent(Item2).DataSetIndex) then
      Result:= 1
    else
    if (TOneEvent(Item1).DataSetIndex > TOneEvent(Item2).DataSetIndex) then
      Result:= -1
    else
      Result:= 0;
  end;
end;
Anzeigeergebis in meiner Tabelle:
Delphi-Quellcode:
31.08.09;14:45:52 ;;0;20;
31.08.09;14:45:44 ;;0;19;
31.08.09;14:45:44 ;;0;18;
31.08.09;14:41:46 ;;0;17;
31.08.09;14:41:36 ;;0;16;
31.08.09;14:41:36 ;;0;15;
31.08.09;14:36:06 ;;0;14;
31.08.09;14:35:59 ;;0;13;
31.08.09;14:35:59 ;;0;12;
31.08.09;13:07:28 ;;0;11;
30.09.09;13:07:28 ;;0;10;
30.09.09;13:07:26 ;;0;9;
30.09.09;13:07:19 ;;0;8;
30.09.09;13:07:11 ;;0;7;
31.08.09;13:07:20 ;;0;6;
31.08.09;13:05:36 ;;0;5;
31.08.09;13:05:36 ;;0;4;
31.08.09;12:44:06 ;;0;3;
31.08.09;12:44:05 ;;0;2;
25.11.09;12:44:22 ;;0;1;
19.08.09;02:30:08 ;;1;25;
19.08.09;02:29:55 ;;1;24;
19.08.09;02:29:47 ;;1;23;
19.08.09;02:29:38 ;;1;22;
19.08.09;02:28:57 ;;1;21;
Das sieht jetzt erstmal ziemlich durcheinander aus, bedeutet aber (von unten nach oben gelesen):
Am 25.11.09 hat jemand das Datum verstellt auf 31.08.2009. Dann traten ein paar Ereignisse auf, bis jemand wieder am 31.08.09, 13:07:20 Uhr, das Datum erneut verstellte auf den 30.09.09.
Am 30.09.09 traten wieder ein paar Ereignisse auf, bis am 30.09.09, 13:07:28 Uhr, erneut das Datum im Gerät veränderte auf den 31.08.09.

Gruß, Carsten
  Mit Zitat antworten Zitat