Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Findfirst/Findnext-Suchmaske (https://www.delphipraxis.net/97561-findfirst-findnext-suchmaske.html)

godlike 12. Aug 2007 21:09


Findfirst/Findnext-Suchmaske
 
Hallo Leute,

Ich habe mich schon vor relativ langer Zeit hier im Forum mal angemeldet, der Grund wieso ich bis jetzt nie geschrieben habe, ist die fehlende Zeit. Mit der Lehre und Fitnesstraining in der Freizeit etc. bleibt leider nicht mehr viel übrig. Besonders wenn man dann auch noch auf einem anderen Board aktiv sein muss und gerne mal ab und an was programmiert, wird's halt immer weniger. Auch wenn ich eigentlich viel lieber ein bisschen mehr hier wäre und mich in die Community integrieren möchte, geht's momentan recht schlecht. Naja, trotz meiner mangelnden Aufmerksamkeit, die ich dem Board hier widme, hoffe ich trotzdem, dass mir jemand bei meiner Frage helfen kann.

Ich schreibe momentan ein Programm, welches gesuchte Dateien (anhand von einer benutzerdefinierten Suchmaske) auflistet. Mein Problem ist nun:

Bei Findfirst kann man ja als Parameter zum Path (z.B. C:\mp3) noch die Dateisuchmaske (z.B. *.mp3) angeben. Somit werden ja nur die mp3-files aufgelistet. Wenn ich nun aber mehrere Extensions in die Suche aufnehmen will (also z.B. *.mp3/*.mp4), wie kann ich das in einer Suche verwirklichen?

Die einzige Idee die mir kam wäre den Filter *.* zu verwenden und einfach alle Extensions mit denen, die in der Suchmaske enhalten sind, zu vergleichen und die passenden rauszupicken.

Ich frage mich nun, ob's da nicht eine einfachere/schönere Lösung gäbe...

Hoffe ihr könnt mir helfen, danke schonmal im Voraus.

SirThornberry 12. Aug 2007 21:28

Re: Findfirst/Findnext-Suchmaske
 
ich wüsste auch nur die von dir genannte lösung und habe es bisher auch immer so gemacht.

godlike 12. Aug 2007 22:39

Re: Findfirst/Findnext-Suchmaske
 
Hmm, schade.

Naja, dann mach ich's eben so, wie ich vorhin sagte. Danke trotzdem.

jim_raynor 13. Aug 2007 08:45

Re: Findfirst/Findnext-Suchmaske
 
Ich glaube Find... unterstützt mehrere Suchstrings mit ; getrennt. Allerdings noch nie verwendet und nicht sicher ob es wirklich so ist. Zu dem weiß ich nicht, wie es sich mit der Suche in Verzeichnissen verhält. Also ob man bei jeder Suchmaske auch das Verzeichnis angeben muss oder einmal das Verzeichnis reicht und dann immer nur die Suchmasken.

Andidreas 13. Aug 2007 09:31

Re: Findfirst/Findnext-Suchmaske
 
hi,

warum machst du nicht zuerst einen suchlauf mit *.mp3 und dann noch einen mit *.mp4
der benutzer müsste dann das gewünschte ergebnis bekommen, und du müsstes im programm immer nur die suchfunktion aufrufen?!!!

sirius 13. Aug 2007 09:38

Re: Findfirst/Findnext-Suchmaske
 
Die Suchmaske "*.mp?" dürfte deinem Ziel am nächsten kommen. Aber mehrere voneinander getrennte suchmasken gibts nicht. Es gibt allerdings keine Performanceeinbußen, wenn man die einzelnen Suchmasken hintereinander durchläuft.

godlike 13. Aug 2007 20:04

Re: Findfirst/Findnext-Suchmaske
 
Keine Performanceeinbussen wenn man mehrere Suchen durchführt, als nur eine? Hmm, kommt mir zwar fast ein bisschen spanisch vor... aber werde ich mal testen. Wenn das wirklich gleich schnell geht, dann erspart mir das eine menge Arbeit. Danke für die Antworten!

scrat1979 13. Aug 2007 20:24

Re: Findfirst/Findnext-Suchmaske
 
Zitat:

Zitat von godlike
Keine Performanceeinbussen wenn man mehrere Suchen durchführt, als nur eine? Hmm, kommt mir zwar fast ein bisschen spanisch vor... aber werde ich mal testen. Wenn das wirklich gleich schnell geht, dann erspart mir das eine menge Arbeit. Danke für die Antworten!

Ich denke, diese Aussage trifft auf Windows XP und später zu (evtl. auch für Win2000), da hier der Cache verwendet wird, der wirklich sehr, sehr schnell ist (kann ich auch bestätigen!). Allerdings meine ich hier schon einmal die Auskunft bekommen zu haben, daß Win98 wohl jedes mal von "vorne" anfangen muss. Falls Du als Zielplattform also Win98 hast, prüfe lieber zuvor, ob es dort auch erträglich lange dauert. Sonst musst Du Dir wohl keine große Sorgen machen, ein paar ms hin oder her sind doch wirklich nicht schlimm :-)

SCRaT

marabu 13. Aug 2007 20:41

Re: Findfirst/Findnext-Suchmaske
 
Hallo,

man kann es zu Fuß machen - oder man verwendet eine Komponente:

Delphi-Quellcode:
function GetFiles(const dir, masks: string; s: TStrings = nil): Integer;
begin
  with TFileListBox.CreateParented(HWND(-3)) do
  try
    Mask := masks;
    Directory := dir;
    FileType := [ftArchive];
    Result := Items.Count;
    if Assigned(s) then
      s.Assign(Items);
  finally
    Free;
  end;
end;

{
var
  s: TStrings;
  n: Cardinal;
begin
  s := TStringList.Create;
  n := GetFiles('c:\audio', '*.mp3;*.mp4', s);
  ShowMessage(IntToStr(n) + sLineBreak + s.Text);
  s.Free;
end;
}
Grüße vom marabu

godlike 13. Aug 2007 23:00

Re: Findfirst/Findnext-Suchmaske
 
Zitat:

Falls Du als Zielplattform also Win98 hast
Hehehe, nein, das ist weniger meine Zielplattform... ich denke aus diesem Jahrhundert sind wir langsam raus. :spin2:

Zitat:

Zitat von marabu
Hallo,

man kann es zu Fuß machen - oder man verwendet eine Komponente:

Delphi-Quellcode:
function GetFiles(const dir, masks: string; s: TStrings = nil): Integer;
begin
  with TFileListBox.CreateParented(HWND(-3)) do
  try
    Mask := masks;
    Directory := dir;
    FileType := [ftArchive];
    Result := Items.Count;
    if Assigned(s) then
      s.Assign(Items);
  finally
    Free;
  end;
end;

{
var
  s: TStrings;
  n: Cardinal;
begin
  s := TStringList.Create;
  n := GetFiles('c:\audio', '*.mp3;*.mp4', s);
  ShowMessage(IntToStr(n) + sLineBreak + s.Text);
  s.Free;
end;
}
Grüße vom marabu

Hört sich vielversprechend an... oder besser "gesagt", sieht vielversprechend aus... Hoffe dass ich am Mittwochabend wieder Zeit zum Proggen habe, dann probiere ich beide Wege mal aus. Danke euch, Leute! Echt ein supi Forum! :hello:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:51 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