Einzelnen Beitrag anzeigen

MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Stringlist nach Datum sortieren

  Alt 3. Jun 2018, 22:19
Hallo,
ich habe hier schon so manche Routine gesehen, wie man das macht, mit diesem CustomSort.
Hat echt gedauert bis ich meine Daten/Variablen so umgebaut habe bis ich das auch nutzen kann.
Dann auch noch "Pointer" Zeugs. Habe ich ja sonst immer gemieden. *lach

Bei mir schaut es jedenfalls jetzt so aus, für eine CustomSort Function.

Code:
Function SortByDate(List: TStringList; Index1, Index2: Integer): Integer;
Begin
   Result := 0;
   If Assigned(List) Then
   Begin
      If (Trunc(TFDListRecord(Pointer(List.Objects[Index1])^).Time*24*60*60*1000) < Trunc(TFDListRecord(Pointer(List.Objects[Index2])^).Time*24*60*60*1000)) Then
      Begin
         If fjSortUp = 0 Then Result := 1 Else Result := -1;
      End Else
      If (Trunc(TFDListRecord(Pointer(List.Objects[Index1])^).Time*24*60*60*1000) > Trunc(TFDListRecord(Pointer(List.Objects[Index2])^).Time*24*60*60*1000)) Then
      Begin
         If fjSortUp = 0 Then Result := -1 Else Result := 1;
      End Else
      If (List[Index1] < List[Index2]) Then
      Begin
         If fjSortUp = 0 Then Result := 1 Else Result := -1;
      End Else
      If (List[Index1] > List[Index2]) Then
      Begin
         If fjSortUp = 0 Then Result := -1 Else Result := 1;
      End;
   End;
End;
Abgesehen von einer Optimierung, wollte ich mal fragen ob dies mit dem 24*60*60*1000 richtig ist? Dies ist in vielen Beispielen nicht angegeben. Die Sortierung ist so jedenfalls genauer aber anders wie z.B. von Total-Commander (nachfolgend TC genannt). Die Zeit kommt von TSearchRec.TimeStamp (TDateTime). Übrigens hat TC zum Windows Explorer (Win10) auch ein paar Unterschiede für die Datums-Sortierung. Ich habe zum Testen das Verzeichnis "C:\Windows\WinSxS" genommen. Dort existieren viele Verzeichnisse mit einer gleichen Zeitangabe. Die Unterschiede der Sortierung ergeben sich wohl durch gleiche Zeitangaben bis in die Millisekunden. Es kommt dann wohl drauf an, wie der TC oder der Win-Explorer weiter sortiert. In meiner Routine prüfe ich ja (im Falle von Result = 0 bei den ersten beiden IF-Abfragen) noch den Dateinamen. Bei mir gibt's im Kopf gerade so viel Input... ich kann gar nicht mehr richtig denken aber vieles versteh ich sowieso nicht.

Aber wie man eine richtige Sortierung macht, würde ich schon gerne lernen. Wobei... was ist richtig? TC oder Win-Explorer? Ich denke mal, in Windows stecken mehr Fehler drin, als im TC

Gruß
Michael
  Mit Zitat antworten Zitat