Thema: Delphi TStringList.Sort

Einzelnen Beitrag anzeigen

mytbo

Registriert seit: 8. Jan 2007
461 Beiträge
 
#9

AW: TStringList.Sort

  Alt 30. Sep 2023, 23:05
Hier der komplette Source: ...
Der Sort kommt bevor ich die StringList an das Memo zur Anzeige übergebe - es wird nur nicht sortiert.
Trenne Dateisuche/Datensammlung und Formatierung. Wenn ich deinen Quelltext richtig verstanden habe, möchtest du Folgendes (ohne Sortierung):
Delphi-Quellcode:
function FindPlayFiles(pmFileList: TStringList; const pmcPath: String; const pmcSearchMask: String = '*'; pmWithSubDirs: Boolean = True): Boolean;
const
  SEARCH_OPTION: array[Boolean] of TSearchOption = (TSearchOption.soTopDirectoryOnly, TSearchOption.soAllDirectories);
begin
  Result := False;
  if pmFileList = Nil then Exit; //=>
  if not TDirectory.Exists(pmcPath) then Exit; //=>

  var files: TStringDynArray := TDirectory.GetFiles(pmcPath, pmcSearchMask, SEARCH_OPTION[pmWithSubDirs]);
  if Length(files) > 0 then
  begin
    pmFileList.Clear;
    pmFileList.AddStrings(files);
    Result := True;
  end;
end;

procedure FormatPlayList(pmFmtList: TStrings; const pmcRootDir: String; pmFileList: TStringList; pmStartNumber: Integer = 1);
begin
  if pmFmtList = Nil then Exit; //=>
  if pmFileList = Nil then Exit; //=>
  if pmFileList.Count = 0 then Exit; //=>
  
  pmFmtList.BeginUpdate;
  try
    var run, currentDir: String;
    for var i: Integer := 0 to pmFileList.Count - 1 do
    begin
      run := TPath.GetDirectoryName(pmFileList[i]);
      if currentDir <> run then
      begin
        currentDir := run;
        pmFmtList.AddObject(Format('%.4d S: %s', [pmStartNumber, currentDir.Substring(Length(pmcRootDir))]), TObject(-1));
        Inc(pmStartNumber);
      end;

      pmFmtList.AddObject(Format('%.4d F: %s', [pmStartNumber, TPath.GetFileName(pmFileList[i])]), TObject(i));
      Inc(pmStartNumber);
    end;
  finally
    pmFmtList.EndUpdate;
  end;
end;

begin
  SerienDB.Memo.Lines.Clear;
  if FindPlayFiles(FFileList, FRootDir) then
    FormatPlayList(SerienDB.Memo.Lines, FRootDir, FFileList);
Disclaimer: Der Entwurf ist nur eine Überarbeitung des Originals.

Bis bald...
Thomas

Geändert von mytbo (30. Sep 2023 um 23:31 Uhr) Grund: Tippfehler korrigiert
  Mit Zitat antworten Zitat