Thema: Delphi TStringList.Sort

Einzelnen Beitrag anzeigen

H.Bothur

Registriert seit: 25. Jun 2012
Ort: Seevetal & Lagos
257 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: TStringList.Sort

  Alt 30. Sep 2023, 18:42
Hier der komplette Source:

Delphi-Quellcode:
unit SerienDatabase;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.ExtCtrls;

type
  TSerienDB = class(TForm)
    BtnPlay: TButton;
    BtnLaden: TButton;
    LbEVerzeichnis: TLabeledEdit;
    Memo1: TMemo;
    procedure BtnLadenClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  SerienDB: TSerienDB;
  LfdNummer: Integer;

implementation

{$R *.dfm}

procedure FindAllFiles(RootFolder: string; Mask: string = '*.*'; Recurse: Boolean = True);
var
  SR: TSearchRec;
  DateiListe: TStringList;
begin
  RootFolder := IncludeTrailingPathDelimiter(RootFolder);
  DateiListe := TStringList.Create;
  DateiListe.Sorted := true;

  if Recurse then
    if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then
      try
        repeat
          if SR.Attr and faDirectory = faDirectory then
            // --> ein Verzeichnis wurde gefunden
            if (SR.Name <> '.') and (SR.Name <> '..') then
            begin
              (* Verzeichnis gefunden *)
              DateiListe.Add(Format('%.*d', [4, LfdNummer]) +' S: ' +SR.Name);
              LfdNummer := LfdNummer +1;
              FindAllFiles(RootFolder + SR.Name, Mask, Recurse);
            end;
        until FindNext(SR) <> 0;
      finally
        FindClose(SR);
      end;
  if FindFirst(RootFolder + Mask, faAnyFile, SR) = 0 then
    try
      repeat
        if SR.Attr and faDirectory <> faDirectory then
        begin
          // --> eine Datei wurde gefunden
          DateiListe.Add(Format('%.*d', [4, LfdNummer]) +' F: ' +SR.Name);
          LfdNummer := LfdNummer +1;
        end;
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
    Dateiliste.Sort;
    SerienDB.Memo1.Lines.AddStrings(DateiListe);
    DateiListe.Free;
end;

procedure TSerienDB.BtnLadenClick(Sender: TObject);
begin
  LfdNummer := 1;
  FindAllFiles(LbEVerzeichnis.Text);
end;

end.
Der Sort kommt bevor ich die StringList an das Memo zur Anzeige übergebe - es wird nur nicht sortiert. Oder - blöde gefrafg, muss ich generell die Sortierfunktion selber dazuschreiben ? Ich hätte gedacht das es so eine normale Ascii-Sortierung geben sollte.

Hans
Hans-Georg Bothur
www.hermann-juergensen.de
  Mit Zitat antworten Zitat