kann BlitzPlus keine Rekursion, oder hab ich einen Fehler?

Übersicht BlitzBasic BlitzPlus

Neue Antwort erstellen

 

cmdrKEEN

Betreff: kann BlitzPlus keine Rekursion, oder hab ich einen Fehler?

BeitragMi, Feb 23, 2005 19:42
Antworten mit Zitat
Benutzer-Profile anzeigen
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
 

cmdrKEEN

Betreff: falsches Forum

BeitragMi, Feb 23, 2005 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
verdammt, Falsches Forum, könnt ihr das verschieben? DAnke
 

noir

BeitragMi, Feb 23, 2005 19:55
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Feb 23, 2005 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
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+]
 

cmdrKEEN

Betreff: Danke

BeitragFr, Feb 25, 2005 0:32
Antworten mit Zitat
Benutzer-Profile anzeigen
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? Wink

Thx

Neue Antwort erstellen


Übersicht BlitzBasic BlitzPlus

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group