AGB  ·  Datenschutz  ·  Impressum  







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

GetFiles SearchPattern

Ein Thema von Willie1 · begonnen am 17. Nov 2024 · letzter Beitrag vom 20. Nov 2024
Antwort Antwort
Willie1

Registriert seit: 28. Mai 2008
691 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

GetFiles SearchPattern

  Alt 17. Nov 2024, 17:42
Hallo Leute,
ich will alle Bildformate aus einem Ordner herausfiltern. Die KI schlägt mir folgendes vor:
Delphi-Quellcode:
uses
  System.SysUtils, System.IOUtils;

procedure FindAllImageFiles(const Path: string);
var
  ImageFiles: TStringDynArray;
  SearchPattern: string;
begin
  // Definiere die Suchmuster für die gängigen Bildformate
  SearchPattern := '*.jpg;*.jpeg;*.bmp;*.png;*.gif;*.tiff;*.ico;*.heif;*.heic';
  
  // Verwende TDirectory.GetFiles, um die Dateien zu finden
  ImageFiles := TDirectory.GetFiles(Path, SearchPattern, TSearchOption.soAllDirectories);
Ich meine, das mit dem Strichpunkt auch schon mal gelesen zu haben. Aber es funktioniert nicht. In der Delphi-Dokumentation steht nur "z.B. *.exe" nicht "*.bmp;*.jpg; ...". Eine weitere Erklärung gibt es nicht.

Danke und Gruß Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: GetFiles SearchPattern

  Alt 17. Nov 2024, 17:55
Das ist EINE FileMask.

Entweder erst alles suchen und dann rausfiltern
oder du gibst eine Suchmethode an (gern auch anonym) und filterst dort beim Suchen.

Oder mehrmals suchen und die Ergebnisse kombinieren.
Oder ein FeatureRequest.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
691 Beiträge
 
Delphi 10.1 Berlin Starter
 
#3

AW: GetFiles SearchPattern

  Alt 17. Nov 2024, 18:16
Okay Himitsu,

das ist also eine KI-Ente. Als ich bei der KI nachgefragt habe, bekam ich heraus, was du vorschlägst. Die KI schlägt jetzt ein array of string für SearchPattern vor!

Ich habe verstanden und weiß, wie es geht. Die "Suchmaske" mit den ; ist zu schön, um wahr zu sein.

Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: GetFiles SearchPattern

  Alt 17. Nov 2024, 18:32
Muß ich die KI jetzt verklagen, weil sie meine Ideen klaut?

Delphi-Quellcode:
Files := nil;
for var SP in '*.jpg;*.jpeg;*.bmp;*.png;*.gif;*.tiff;*.ico;*.heif;*.heic'.Split([';']) do
  Files := Files + TDirectory.GetFiles(Path, SP, TSearchOption.soAllDirectories);

Files := TDirectory.GetFiles(Path, '*.*', TSearchOption.soAllDirectories,
  function(const Path: string; const SearchRec: TSearchRec): Boolean
  begin
    Result := MatchText(ExtractFileExt(SearchRec.Name),
      ['.jpg', '.jpeg', '.bmp', '.png', '.gif', '.tiff', '.ico', '.heif', '.heic']);
  end);
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: GetFiles SearchPattern

  Alt 17. Nov 2024, 18:37
ist zu schön, um wahr zu sein.
Oder ein FeatureRequest.
Besser du fragst das selbst ... ich glaub fast die ignorieren mich meistens, da im QP.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
691 Beiträge
 
Delphi 10.1 Berlin Starter
 
#6

AW: GetFiles SearchPattern

  Alt 18. Nov 2024, 17:54
Ich habe verstanden und weiß, wie es geht. Die "Suchmaske" mit den ; ist zu schön, um wahr zu sein.
Im Anhang eine Demo wie es funktioniert.
Hier im Forum bekommt man immer eine gute Lösung. Danke. Aber wie wäre es damit:
Delphi-Quellcode:
function FilterFiles(const Path, Mask: string): TStringDynArray;
var
  TypeFilter: TDirectory.TFilterPredicate;
  Ext: Tfilename;
begin
  TypeFilter := function(const Path: string; const SR: TSearchRec): Boolean
  begin
    Ext :=LowerCase(ExtractFileext(SR.Name));
    Result := Pos(Ext, string('.bmp;.jpg;.jpeg;.tif;.gif;.png;.heic;')) > 0;
  end;
  Result := TDirectory.GetFiles(Path, Mask, TypeFilter);
end;
Das ist meine eigene Idee. Wo die Performance besser ist, weiß ich nicht. Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.

Geändert von Willie1 (18. Nov 2024 um 17:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: GetFiles SearchPattern

  Alt 18. Nov 2024, 18:14
Zitat:
aber wie ...
findet auch .gi oder .p

Pos(';' + Ext + ';', string(';.bmp;.jpg;.jpeg;.tif;.gif;.png;.heic;')
aber weil man hier vorne schon einen Punkt hat, kann man den mit benutzen
Pos(Ext + ';', string('.bmp;.jpg;.jpeg;.tif;.gif;.png;.heic;')
Pos(Ext + '.', string('.bmp.jpg.jpeg.tif.gif.png.heic.')



PS: Du wirst es nicht glauben, aber MatchText war absichtlich ausgewählt, da es funktionial super, sicher und schnell passt.

Pos() > bzw. <> 0
entspricht ContainsStr

LowerCase + Pos
entspricht ContainsText

SameText / SameStr
MatchText / MatchStr
IndexText / IndexStr
...

Und mit EndsText müßte man nichtmal den Dateiname trennen, aber das geht nur mit "einer" Dateiendung gleichzeitig.


if Pos('fig.', ReverseString('C:\irgendwo\test.gif')) = 1 then
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (18. Nov 2024 um 18:28 Uhr)
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
513 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: GetFiles SearchPattern

  Alt 18. Nov 2024, 09:10
Ich habe verstanden und weiß, wie es geht. Die "Suchmaske" mit den ; ist zu schön, um wahr zu sein.
Im Anhang eine Demo wie es funktioniert.
Angehängte Dateien
Dateityp: zip GetFiles-Demo.zip (69,4 KB, 17x aufgerufen)
  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 16:22 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