kann BlitzPlus keine Rekursion, oder hab ich einen Fehler?
Übersicht

cmdrKEENBetreff: kann BlitzPlus keine Rekursion, oder hab ich einen Fehler? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo, ich habe versucht eine Funktion zu schreiben, die einen Ordner und die Unterordner nach bestimmten Dateitypen durchsucht. Ich hab das Gazne rekursiv gemacht, so daß die Funktion, wenn sich in dem Ordner ein Unterordner befindet, nochmal gestartet wird.
Ich bekomm immer, wenn sich die Funktion das erste mal selbst aufruft, den Fehler, daß die lokale Variable datei$ ein unzulässiger Handle sei. Beim ersten mal wird sie noch angenommen. Ich hab die Funktion mal kommentiert und hier rein kopiert. Kann BlitzPlus keine Rekursionen oder hab ich nen Programmierfehler? Ich weiß, man kann einiges, was ich da gemacht hab auch einfacher Lösen.. Code: [AUSKLAPPEN] Function Durchsuche(Path$,Types$,Recursive) suchmich = ReadDir(Path$) ;zu durchsuchender Ordner wird in suchmich gespeichert (lokal!) Repeat ;alle dateien in dem Ordner durchsuchen Datei$ = NextFile(suchmich) ;die nächste Datei in der lokalen! Variablen Datei$ speichern If datei <> "." And datei <> ".." And datei <> "" ;wenn die zu prüfende Datei . .. oder gar keinen Namen hat, überspringe die Prüfung If (FileType(path+"\"+datei) = 2) And recursive Then ;wenn die zu prüfende Datei ein Ordner ist und darunterliegende Ordner durchsucht werden sollen Durchsuche(""+Path$+datei$,Types$,Recursive) ;starte diese Funktion von vorne, mit dem darunterliegenden Ordner Else ;wenn die zu prüfende Datei wirklich eine Datei ist... For PosCount = 1 To Len(Datei$) ;von vorne nach hinten suchen, ob sie den Buchstabe "." enthält If Asc (Mid (Datei$,PosCount,1)) = 46 Lastpoint = PosCount Next ;jetzt steht in Lastpoint, an welcher Stelle des Dateinamens der letzte Punkt steht LastPoint = Len(Datei$)-LastPoint ;Lastpoint enthält jetzt den ersten Punkt von rechts If lastpoint<1 Stop ;Eine Sicherheitsabfrage, ob der Dateiname überhaupt einen Punkt enthält Extension$ = Right(Datei$,Lastpoint) ;Extension enthält den Teil des Dateinamensnde, der nach dem letzten punkt kommt lastcount = 0 ;enthält die Position des letzten gefundenen Kommas bzw am Anfang 0 ;Diese Schleife ist dafür da, dass man mehrere zu suchende Endungen ;(mit Komma getrennt) an die Funktion übergeben kann For typeCount = 1 To Len(types) If Asc(Mid(types,typecount,1)) = 44 Then onetype$=Mid(types,lastcount+1,(typecount-lastcount)-1) ;onetype ist das, was in Types$ zwischen dem gerade gefundenen Komma und dem Anfang ;oder dem davor gefundenen Komma (Lastcount) steht onetype = Trim(onetype) ;entfernt die Leerzeichen am afang und am ende der endung ;hier kann man noch mehr einfügen, was die eingabe am Anfang komfortabler macht. ;z.B Groß-kleinschreibung ignorieren, endungen mit punkt angeben... If Extension$ = onetype$ neu(""+Path$+"\"+datei$) ;stimmt eine gesuchte Endung (onetype) mit der Endung der Datei überein, ;wird die Funktion Neu gestartet und die Datei mit Pfad an Sie übergeben lastcount = typecount EndIf Next ;stimmt die letzte gesuchte Endung (onetype) mit der Endung der Datei überein, ;wird die Funktion Neu gestartet und die Datei mit Pfad an Sie übergeben onetype$=Mid(types,lastcount+1,(typecount-lastcount)-1) If Lastpoint>0 And Extension$ = onetype$ neu(""+Path$+"\"+datei$) EndIf EndIf Until datei$ = "" ;bis keine Datei im Ordner mehr übrig ist End Function *edit* hab das mal in Codetags gesetzt. Die Tabstops sind immer noch verschoben, aber wenn man das ganze in BB einfügt, dann sist es (bei mir) sehr übersichtlich. |
||
- Zuletzt bearbeitet von cmdrKEEN am Fr, Feb 25, 2005 0:42, insgesamt 2-mal bearbeitet
cmdrKEENBetreff: falsches Forum |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
verdammt, Falsches Forum, könnt ihr das verschieben? DAnke | ||
noir |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
dein code is nicht sehr schön zu lesen mach ihn mal in Code Tags.
kannst mal hier schauen: https://www.blitzforum.de/viewtopic.php?t=8794 da hab ich mal ein beispiel gepostet um die festplatte auszulesen, rekursiv, vielleicht bringt es dir was. |
||
Fragt und man wird euch helfen
Das Alternativ BlitzBasic-Forum: FreeCoder Einfach chatten: BlitzChat Code&Text schnell und einfach pasten: FreePasting |
- Zuletzt bearbeitet von noir am So, März 06, 2005 12:22, insgesamt einmal bearbeitet
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Habs mal durchgesehen und mir ist aufgefallen das da dein Fehler liegtCode: [AUSKLAPPEN] If (FileType (path + "\" + datei) = 2) And recursive Then ;wenn die zu prüfende Datei ein Ordner ist und darunterliegende Ordner durchsucht werden sollen
Durchsuche ("" + Path$+ datei$,Types$,Recursive) die Zeile müßte demnach so lauten Code: [AUSKLAPPEN] Durchsuche ("" + Path$+"\" +datei$,Types$,Recursive)
|
||
[BB2D | BB3D | BB+]
|
cmdrKEENBetreff: Danke |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke an euch, hat mir sehr geholfen. Ich hatte schon fast den glauben an mich verloren.
Hab mir die Funktion mal angesehen, gefällt mir gut. Da sind noch ein paar Schen gelöst, mir denen ich noch so meine Probleme hatte. Mir war schon klar, das es so was bestimmt irgendwo gibt, aber das ganze war ein Übungsprojekt von mir an mich. Da kann mich mich ja jetz größeren Aufgaben zuwenden... Kann man mit Blitz eigentlich Betriebssysteme programmieren? ![]() Thx |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group