AGB  ·  Datenschutz  ·  Impressum  







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

Nach Datum Sortieren

Ein Thema von TurboMartin · begonnen am 2. Dez 2006 · letzter Beitrag vom 2. Dez 2006
Antwort Antwort
TurboMartin

Registriert seit: 13. Feb 2006
Ort: Bad Honnef
765 Beiträge
 
Turbo Delphi für Win32
 
#1

Nach Datum Sortieren

  Alt 2. Dez 2006, 11:26
Hi DP ,
Ich habe folgenden Code:
Delphi-Quellcode:
strlBilder := TStringList.Create;
  FindFirst('*.jpg', faAnyFile, srBilder1);
  strlBilder.Add(srBilder1.Name);
  while FindNext(srBilder1) = 0 do
  begin
    strlBilder.Add(srBilder1.Name);
 // ShowMessage('');
  end;
  FindClose(srBilder1);
  strlBilder.Sorted := false;
  strlBilder.CustomSort(@CompareDate);
Quele: Post #7
Allerdings funktioniert das nicht, und es gibt mindestens eine AV.
Aber wie kann ich es sonst nach Datum in einer StringList sortieren?
Tomorrow will be cancelled due to lack of interest.

  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

Re: Nach Datum Sortieren

  Alt 2. Dez 2006, 11:35
Wo kommt welcher Fehler?



erstmal zum suchen der Dateien ...

Frag dich mal was dein Code macht, wenn KEIN Bild gefunden wird

Delphi-Quellcode:
strlBilder := TStringList.Create;
if FindFirst('*.jpg', faAnyFile, srBilder1) = 0 then
begin
  strlBilder.Add(srBilder1.Name);
  while FindNext(srBilder1) = 0 do
  begin
    strlBilder.Add(srBilder1.Name);
  end;
FindClose(srBilder1);
strlBilder.Sorted := false;
strlBilder.CustomSort(CompareDate);
oder
Delphi-Quellcode:
strlBilder := TStringList.Create;
if FindFirst('*.jpg', faAnyFile, srBilder1) <> 0 then
  repeat
    strlBilder.Add(srBilder1.Name);
  until FindNext(srBilder1) <> 0;
FindClose(srBilder1);
strlBilder.Sorted := false;
strlBilder.CustomSort(CompareDate);
Und dann ist in dem anderen Thread kein @ vor der Vergleichsfunktion.


Aber besser und schneller sollte es gehen, wenn du direkt beim Eintragen in die Stringliste selber sortierst.
FindFirst/FindNext liefert im SearchRec das Datum mit und über einen RecordArray, mit Datum und Name kann man da schöne Sachen machen.

z.B.:
Delphi-Quellcode:
Var strlBilder: Array of Record
    Name: String;
    Datum: irgendwas;
  End;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
TurboMartin

Registriert seit: 13. Feb 2006
Ort: Bad Honnef
765 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Nach Datum Sortieren

  Alt 2. Dez 2006, 16:28
Hi,
ich hab den Queltext verändert:
Delphi-Quellcode:
  function CompareDate(List: TStringList; Index1, Index2: Integer):Integer;
var
  Val1, Val2: TDateTime;
  str1, str2: String;
begin
  val1:= FileDateToDateTime(FileAge(list[Index1]));
  val2:= FileDateToDateTime(FileAge(list[Index2]));
  str1:= DateTimeToStr(val1);
  str2:= DateTimeToStr(val2);
  Result := CompareText(str1, str2);
end;
Allerdings, woch ich strlBilder.CustomSort(CompareDate) aufrufe, kommt immer der Fehler Incompatible Types: 'Integer' and 'TValueRelationship'.
Tomorrow will be cancelled due to lack of interest.

  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Nach Datum Sortieren

  Alt 2. Dez 2006, 17:10
Es ist nur ein Anfang, die Extras (Fehlerbehandlung, rekursive Suche, Speichern der Pfade,...) darfst du selbst übernehmen.

Delphi-Quellcode:
function SortByDate (aList: TStringList; aIndex1, aIndex2: Integer): Integer;
begin
  Result := Integer(aList.Objects[aIndex1]) - Integer(aList.Objects[aIndex2]);
end;

procedure GetSortedFileList (const aMask: string; aList: TStrings);
var
  code: Integer;
  SR: TSearchRec;
  L: TStringList;
begin
  L := TStringList.Create;
  try
    L.Sorted := False;
    L.BeginUpdate;
    code := FindFirst(aMask, faAnyFile, SR);
    while (code = 0) do
      begin
        L.AddObject(SR.Name, TObject(SR.Time));
        code := FindNext(SR);
      end;
    FindClose (SR);
    L.CustomSort (SortByDate);
    L.EndUpdate;
    aList.Assign (L);
  finally
    L.Free;
  end;
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz