AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stringlist nach Datum sortieren

Ein Thema von MicMic · begonnen am 3. Jun 2018 · letzter Beitrag vom 4. Jun 2018
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.176 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Stringlist nach Datum sortieren

  Alt 3. Jun 2018, 21:58
Hallo,

ich habe sowas auch schon mal umgesetzt. Auch aus Performancegründen habe ich mir das Datum dabei im Format YYYYMMDD... (als Integer) in der Object-ID der StringList jeweils weggespeichert (die weiterer Nutzung der Uhrzeiten legt die Genauigkeit fest wie die Sortierung sein soll).
Wie die Anzeige für den User sein soll kannst du dann selbst festlegen. Sortiert wird aber nach der Object-ID der einzelnen Zeilen der StringList.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Stringlist nach Datum sortieren

  Alt 3. Jun 2018, 22:00
Ich mach es ähnlich wie hier beschrieben. Relativ direkte Methode, ich bin sehr Zufrieden so.

edit
Ich beziehe mich auf das:
Delphi-Quellcode:
{$APPTYPE CONSOLE}

uses
  SysUtils,
  Classes,
  DateUtils;

function CompareDate(List: TStringList; Index1, Index2: Integer): Integer;
var
  Val1, Val2: TDateTime;
begin
  val1:= FileDateToDateTime(FileAge(list[Index1]));
  val2:= FileDateToDateTime(FileAge(list[Index2]));
  Result := CompareDateTime(Val1, Val2);
end;

var
  sl : TStringList;
  i : Integer;
begin
  sl := TStringList.Create();

  sl.Add('New Text Document (3).txt');
  sl.Add('New Text Document (2).txt');
  sl.Add('New Text Document.txt');

  sl.CustomSort(CompareDate);

  for i := 0 to sl.Count - 1 do
  begin
    Writeln(sl[i]);
  end;
end.
Gruß vom KodeZwerg

Geändert von KodeZwerg ( 3. Jun 2018 um 22:15 Uhr)
  Mit Zitat antworten Zitat
MicMic

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

AW: Stringlist nach Datum sortieren

  Alt 3. Jun 2018, 23:54
Ob FileAge hier für die Geschwindigkeit gut ist? Ich glaube nicht.
und FileDateToDateTime prüft hier wohl auch nur das Datum und nicht eine Uhrzeit? Zumindest wenn ich es richtig verstehe. FileDateToDateTime=32 Bit. Double=64 Bit?

Ich habe jedenfalls eben noch herausgefunden, dass meine 2 letzten IF-Abfragen nicht funktionieren. Hier soll ja ein Dateiname (TSearchrec.Name) sortiert werden, wenn bei Datum für Result 0 rauskommt. Also habe ich die letzten beiden IFs mal abgeändert:
Code:
If fjSortUp = 0 Then Result := -AnsiCompareText(List[Index1],List[Index2])
Else Result := AnsiCompareText(List[Index1],List[Index2])
So funktioniert dann auch die Sortierung mit den Dateinamen. Jedoch gibt es dennoch unterschiede zum TC. Es kommt halt darauf an, was der TC macht, wenn der Datumsvergleich bei gleichen Zeiten für Dateien oder Verzeichnisse 0 ergibt. Ich dachte evtl. das hier noch zusätzlich (wenn Result 0 ergibt) andere Datumsquellen genutzt werden (z.B. ein Erstellungsdatum). Aber in dem Verzeichnis wo ich das alles teste, haben die anderen Datumsquellen gleiche Angaben zum normalen Änderungsdatum.

Die Geschichte geht ja dann auch weiter. Zum Beispiel beim Sortieren der Dateigröße. Dort hat man auch gleiche Dateigrößen in einem Verzeichnis. Also muss man sich doch gut überlegen, was man macht, wenn ein Datum oder eine Dateigröße gleich ist. Oder soll man wenn Index1 < Index2 oder Index1 > Index2 den Wert 0 zurück liefert, weitere Prüfungen auslassen und damit Leben?

Vielleicht könnte noch jemand etwas zu diesem ...Time*24*60*60*1000 schreiben, ob dies so richtig ist.

Michael
  Mit Zitat antworten Zitat
MicMic

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

AW: Stringlist nach Datum sortieren

  Alt 4. Jun 2018, 08:06
Ich habe nun herausgefunden wie der TC bei Datum sortiert.
Also entweder auf oder absteigend und wenn ein Datum+Zeit gleich ist, wird nach Dateinamen sortiert aber hier dann nur immer in einer Richtung.

Wie es der Win-Explorer macht, weiß ich noch nicht

Michael
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: Stringlist nach Datum sortieren

  Alt 4. Jun 2018, 08:13
Evtl. ist es aber auch von der vorherigen Sortierung abhängig? Also es wird z.B erst nach Name sortiert. Dann wird auf das Datum geklickt um nach dem Datum zu sortieren und je nach Sortieralgo, bleibt die vorherige Namessortierung dabei erhalten oder nicht. Stichwort ist glaub ich Stabilität?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Stringlist nach Datum sortieren

  Alt 4. Jun 2018, 11:50
"Stabilität" ist korrekt.
ist ein Algo. "stabil", dann behält er die vorgefundene Reihenfolge bei, wenn beide Vergleichsfelder/Werte gleich sind.
Was das Filedate angeht, wenn ich mich recht erinnere liegt die Auflösung bei 2 sec. Zumindest unter DOS bzw FAT war es so.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
MicMic

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

AW: Stringlist nach Datum sortieren

  Alt 4. Jun 2018, 12:57
Eine vorherige Sortierung zu berücksichtigen würde Sinn machen.
Aber der Win-Explorer oder der TC macht das auch nicht.

Man könnte dann aber wirklich auch Sinn hineingeben, dass man von einer Standard-Sortierung ausgeht (Also nach Alphabet der Dateinamen), wenn Datumsvergleiche (+Zeit) wegen gleichen Datumsangaben (+Zeit) fehlschlagen. So werde ich das dann auch lassen und bei der Sortierung der Dateigröße ebenfalls so handeln.

Michael
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Stringlist nach Datum sortieren

  Alt 4. Jun 2018, 17:14
ich hab was überlesen, sorry, Beitrag entfernt.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.385 Beiträge
 
Delphi 12 Athens
 
#9

AW: Stringlist nach Datum sortieren

  Alt 4. Jun 2018, 17:19
Man kann auch nach mehreren Kriteien sortieren und bekommt so ebenfalls ein eindeutiges Ergebnis.
Ob da nun stabil sortiert wird oder nicht, ist dabei egal, da Beide das selbe Ergebnis liefern.

z.B. als letztes der Dateiname, welcher bekanntlich eindeutig ist und somit auch nur "eine" Reihenfolge zulässt.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 4. Jun 2018 um 17:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Stringlist nach Datum sortieren

  Alt 4. Jun 2018, 20:32
Ob FileAge hier für die Geschwindigkeit gut ist? Ich glaube nicht.
Ich wüsst nicht das FileAge eine Bremse sein kann. Hier noch etwas Lektüre - FileDateToDateTime
Zitat:
You may need to use FileDateToDateTime to convert the Time field of the TSearchRec type used by the FindFirst and FindNext functions.
Und die Frage ob bei FileDateToDateTime auch die Zeit erfasst wird ist damit auch geklärt.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz