Kann findfirst mit mehren erweiterungen umgehen ?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Kann findfirst mit mehren erweiterungen umgehen ?

Beitrag von pluto »

hallo,
ich habe hier eine findfirst variante

Code: Alles auswählen

procedure tFileTools.SetFiles(dir,Mask:String;att:Longint);
var
  sr:TSearchRec;
begin
  writeln(dir + Mask);
  if FindFirst(dir + Mask,att,sr) = 0 then begin
    if GetAnderDir(dir ,Mask,faDirectory or faAnyFile) = true then begin
      add('..','..',true);
      fEdit.text:=dir;
    end;
 
    repeat
      if (sr.name <> '..') and (sr.name <> '.') then begin
        if ((sr.Attr and faDirectory) = faDirectory) then
          add(dir+sr.Name,'',true)
        else
          add(dir+sr.Name,sr.Name,False)
     end;
    until FindNext(sr) <> 0;
    FindClose(sr);
  end;
end;


und die rufe ich unter Linux so auf:
SetFiles('/media/hda7/','*sh *mp3',faDirectory));
nehme ich nur eine Erweiterung z.b. *sh und mach das *mp3 weg dann geht es nehme ich beide geht es nicht mehr....
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Kann es sein, das der mask-string einfach als eine Maske angesehen wird, und es daher natürlich auch keine dateien mit solch einer Endung gibt?

Ich würde auf die Überschrift bezogen also mal mit nein antworten.

Wenn es so ist, kannst du ja einfach die Funktion für jede Maske einzeln aufrufen und zusammennehmen am Ende.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

du kannst es nicht mit mehreren erweiterungen mit leerzeichen getrennt aufrufen.
kannst als mask *.* angeben oder nur * dann findest halt alle
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Wird mit FindFirst nicht gehen, das stammt aus DOS-Zeiten und bezieht sich deshalb auf nur ein Muster.

Aber man kann ja "ls" als externe Routine (BS-Audruf) bauen und sich die Ergebnisliste ins Programm holen. Dann gehen reguläre Ausdrücke und damit auch beliebige Suchmuster.

#Edit

Das proggi "ls" gibt es auch irgendwo für Windoofs, wegen der Kompatibilität sollte man das dann mitliefern.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

umständlicher gehts auch nicht mehr was man könnte ja auch ne funktion schreiben die sowas kann anstelle ein externes tool zu beschäftigen
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

@Christian

Das mach mal mit FindFirst... :shock:

Jede Wette, das der Aufruf von "ls" z.B. in Utilitis erheblich einfacher geht. Den anderen Quark hab ich mal zu DOS-Zeiten machen müssen, das gibt ne Heiden-Arbeit und ist grausig undurchsichtig. Da müßte man ne Liste übergeben und die Elemente einzeln abarbeiten und dann in einer Ergebnisliste speichern.

Insbesondere das Durchsuchen von Unterverzeichnissen ist mit FindFirst/FindNext alles andere als ein "Zuckerschlecken".
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

und die rufe ich unter Linux so auf:
SetFiles('/media/hda7/','*sh *mp3',faDirectory));
nehme ich nur eine Erweiterung z.b. *sh und mach das *mp3 weg dann geht es nehme ich beide geht es nicht mehr....

Und was ist, wenn Du den String ZUERST zerlegst und dann für jede Term die Routine aufruftst und die Ergebnisse akkumulierst ?

@schnullerbacke
Wenn man mit Rekursionen umgehen kann, dann gehts. Trotzdem muss man für jeden Term extra suchen. Dann kann ich gleich obiges machen. :roll:
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

das habe ich mir schon fast gedacht !
nagut dann muss ich es halt prüfen mit pos und fertig das ist kein Problem und Unterverzeichnise sind mit findfirst und findnext überhaupt kein Problem es gibt genügen fertige beispiele dazu*G*

Vielen Dank für eure antworten !
MFG
Michael Springwald

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

@af0815

Rekursionen sind mit Vorsicht zu genießen. Aber ob nun zerlegen oder gleich Liste kommt etwa auf's Gleiche raus. Einzeln abarbeiten muß man auf jeden Fall. Das würde man sich bei "ls" eindeutig ersparen. Wurzelverzeichnis setzen, regulären Ausdruck und fertig ist der Lack.

Hab gerade geguckt ob ich die Kiste mit dem externen Aufruf irgendwo finde, aber Pustekuchen. Das werd ich dann mal als Utility basteln, dann kann man ja z.B. per Dialoge verschiedene häufig verwendete tools wie ls, dir usw. da reinbauen, am besten wohl als Thread. Den Dialog nur um die Parameter und die regulären Ausdrücke zu setzen (eventuell mit Hilfe). Ich muß eh noch nen Daemon bauen, dafür brauch ich sowas auch noch.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Antworten