Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#24

AW: Delphi Listbox Items nach Teil String sortieren

  Alt 31. Dez 2017, 18:14
Hier FindFirst('Liste*.txt',faAnyFile,sr) steht im ersten Parameter von FindFirst ein Platzhalter für den Dateinamen.

Es werden also in dem Beispiel alle Dateien geladen, deren name dem Muster [i]Listeirgendwas.txt[(i] entsprechen. Wenn es da nur eine Datei gibt, wird auch nur die geladen. Hier sollten also alle Dateien mit den Namen Liste1.txt, Liste2.txt ... geladen werden.
Man könnte auch FindFirst('*.*',faAnyFile,sr) angeben, aber dann werden nicht nur Textdateien, sondern auch Exen, DLLs ... geladen, das wäre vermutlich eher suboptimal

Deine Namensvorstellungen von weiter oben (Liste(1).txt,Liste(2).txt ...) müssten mit der Routine eigentlich umsetzbar sein.

Die Routine fügt mit AddStrings die zuletzt gelesene Datei immer "hinten an". Der Inhalt von Items ist also nicht irgendwie sortiert.

Aber dem können wir abhelfen (wieder nur hingedadddelt und ungetestet):
Delphi-Quellcode:
var
  sl : TStringList;
  slAlles : TStringList;
  sr : TSearchRec;
begin
  sl := TStringList.Create;
  slAlles := TStringList.Create;
  Listbox1.Items.Clear;
  // Statt Liste*.txt irgendeinen Namensplatzhalter nach eigenen Wünschen.
  // Ggfls. auch noch 'nen Pfad mit angeben.
  If FindFirst('Liste*.txt',faAnyFile,sr) = 0 then begin
    Repeat
      sl.LoadFromFile(sr.Name);
      slAlles.AddStrings(sl);
    until FindNext(sr) <> 0;
  end;
  FindClose(sr);
  slAlles.Sort;
  Listbox1.Items.AddStrings(slAlles);
  slAlles.Free;
  sl.Free;
end;
Wenn Du Besonderheiten bei der Sortierung haben möchtest, so schau Dir mal die Möglichkeiten von TStringList an. Da gibt es auch die Option, eine eigene Sortierroutine zu nutzen. Dazu dient die Methode CustomSort, Infos dazu findest Du z. B. hier: TStringList CustomSort site:delphipraxis.net
  Mit Zitat antworten Zitat