![]() |
findfirst, findnext problem
Guten Morgen erstmal allen.
Irgendwie will es bei mir nicht klappen ich denke es liegt wohl an meinen Kopfschmerzen ;) eine eigentlich relative simple Frage. Wie kann ich einen Ordner bsp. Test durchsuchen und ALLE datein in ein Memo bzw Listbox anzeigen lassen? MFG |
Re: findfirst, findnext problem
|
Re: findfirst, findnext problem
|
Re: findfirst, findnext problem
wie sieht denn dein bisheriger Quelltext aus?
Als erstes musst du mit FindFirst die erste Datei suchen. Ist FindFirst erfolgreich durchläufst du mit FindNext in einer Schleife den Rest (bis FindNext nichts mehr findet). Anschließend mit FindClose die Suche abschließen. In der Schleife kannst du dann einfach die Ergebnisse von FindNext in dein Memo adden:
Delphi-Quellcode:
if FindFirst(...) = erfolg then
begin repeat //suchergebnis in memo einfügen until not (FindNext = erfolg); FindClose(...); end; |
Re: findfirst, findnext problem
Danke habs nun hinbekommen.
Nur ein kleines Problem hab ich noch. Und zwar speicher er mir den kompletten Pfad in die Listbox. Kann man das auch so ändern das nur der Name der Datei gespeichert wird? |
Re: findfirst, findnext problem
ExtractFileName()
|
Re: findfirst, findnext problem
Danke 0815 :)
So nun aber die letzte Frage. Ist es möglich bei einer If Anweisung es ca. so zumachen If ZW = Suche +'*' then bla bla ZW = variable Zwischenspeicher Suche = variable der Sucheingabe Das heißt möchte gern wissen ob man nach der Datei xyz* suchen kann per if Anweisung? |
Re: findfirst, findnext problem
Soll das * ein Platzhalter (Wildcard) sein?
|
Re: findfirst, findnext problem
ja genau ;)
|
Re: findfirst, findnext problem
Was genau meinst du damit? Dass alle dateien, die mit xyz beginnen, gefunden werden sollen?
Wenn ja könntest du die Position der Wildcard per Posi := Pos(String,'*') ermitteln, den gewünschten string per LeftStr(String,Posi - 1) rausschneiden und dann mit CompareString() (?) vergleichen |
Re: findfirst, findnext problem
Sorry hab wohl vergessen etwas dazu zu schreiben.
ALso es ist so ich suche in jeder Datei die in Ordner xyz gefunden wurde Zeile 2 und lese sie aus. BIS DAHIN KEIN PROBLEM. nun mein Problem das wort welches auslesen werden soll soll Suche* sein also zb. Suchehasel oder Suchexyz * soll dabei der Platzhalter sein. Es geht also nicht um eine Datei sondern um einen Text in einer Textdatei. Das sozusagen alle Wörter mit Suche* gefunden werden und dann gespeichert. Ich hoffe es kam halbwegs verständlich rüber, |
Re: findfirst, findnext problem
Das könntest du imho per Pos(Zeilentext,Suchtext) machen...
|
Re: findfirst, findnext problem
Das ist nicht ausreichend, dann müssen die beiden Strings etwas umfangreicher verglichen werden, z.B. so...
Delphi-Quellcode:
function MatchStr(Source,Pattern:String;CaseSensitive:Boolean):Boolean;
function Match(Source,Pattern:PChar):Boolean; begin if StrComp(Pattern,'*')=0 then Result:=true else if (Source^=Chr(0)) and (Pattern^<>Chr(0)) then Result:=false else if Source^=Chr(0) then Result:=true else case Pattern^ of '*': if Match(Source,@Pattern[1]) then Result:=true else Result:=Match(@Source[1],Pattern); '?': Result:=Match(@Source[1],@Pattern[1]); else if Source^=Pattern^ then Result:=Match(@Source[1],@Pattern[1]) else Result:=false; end; end; begin if not(CaseSensitive) then begin Source :=AnsiLowerCase(Source); Pattern:=AnsiLowerCase(Pattern); end; Result:=Match(PChar(Source),PChar(Pattern)) end; |
Re: findfirst, findnext problem
Momentan hab ich eine Funktion die es mir ermöglicht eine bestimmte Zeile einer Textdatei auszulesen.
Delphi-Quellcode:
// Funktion zum auslesen einer bestimmten Zeile.
function GetXLine(FileName:String;Line:integer):String; var f:Textfile; i:Integer; s:String; begin result:=''; assignfile(f,FileName); reset(f); i := 0; while(not eof(f)) and (i<=Line) do begin inc(i); readln(f,s); if i = Line then result := s; end; closefile(f); end; Aufrufen tu ich sie mir
Delphi-Quellcode:
Path = Pfad in der die Dateien liegen
ZW:= GetXLine(Path + LBZWDateipfad.Items.Strings[i], 2);
LBZWDateipfad.Items.Strings[i] = Alle Dateien aus dem Ordner die nach und nach abgegangen werden und die 2 ist halt die Zeile die ausgelesen wird. nur würd ich gern dann:
Delphi-Quellcode:
machen nur so gehts ja nicht.
if ZW = suche* then // Fehlerhafte code
kannst du mir da ein bespiel geben mit der Pos oder gehts anderst? |
Re: findfirst, findnext problem
Moin youu,
ich setzte voraus, dass ZW ein gültiger String ist, was ist aber "suche*" ? Soll das Suchmuster "suche*' sein? Dann setzte MatchStr(ZW,'suche*',false) ein! |
Re: findfirst, findnext problem
Hm deine Funktion gibt doch einen Boolean werd zurück und keinen String? oder hab ich etwas übersehen?
Somit wird die Fehlermeldung string und boolean inkompatible typen erscheinen? ZW ist eine variable zwischenspeicher : string Suche ist das Suchwort des Nutzers : string * sollte nur eine Art Platzhalter sein bzw Wildcard welches allerdings nicht in der Form in einer If Anweisung funktioniert |
Re: findfirst, findnext problem
Also, jetzt verstehe ich dich leider nicht. Du willst doch mit "if ZW=suche* then ..." prüfen, und an dieser Stelle setzt du einfach MatchStr() ein ...
|
Re: findfirst, findnext problem
Oh mein Gott war ich dumm.
Habs nun gesehen was du meintest, teste es gleich. Edit: hat super geklappt danke dir für die Geduld |
Re: findfirst, findnext problem
Prima, hab' gern geholfen :thumb:
|
DP-Maintenance
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:52 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