Seite 1 von 2
Unterordner einbeziehen in Suche....
Verfasst: 21.10.2005 14:03
von Tafkadasom2k5
Stumpf, stumpfer , ich...
Ich versuche gerade darüber nachzudenken, wie ich einen Ordner mit PB auswählen lassn kann, und das er alle darin enthaltenen Mp3s auflistet-aber auch die, die in den Unterordnern sitzen.
Zudem brauch ich ne Dll oder ne Lib womit man die Tags auslesen kann-hat da jemand aushilfe für mich?
Merci!
Der Marc

Verfasst: 21.10.2005 15:05
von Konne
Du lässt den Ordner über nen Requester auswählen und dann ließt du den ausgewählten ordner mit den Standrt Befehlen von PB Aus.
Hilfe gibts dazu bei "FileSystem"
Ein Rekursiver Proceduren aufruf ist dafür wohl am besten geeignet...
Verfasst: 22.10.2005 10:54
von Tafkadasom2k5
Konne hat geschrieben:Du lässt den Ordner über nen Requester auswählen und dann ließt du den ausgewählten ordner mit den Standard Befehlen von PB Aus.
Hilfe gibts dazu bei "FileSystem"
Ein Rekursiver Prozeduren Aufruf ist dafür wohl am besten geeignet...
Aha,danke erstmal-aber-was ist ein "Rekursiver Prozeduren Aufruf"?
Gr33tz
Der Marc

Verfasst: 22.10.2005 13:03
von Christian H
Tafkadasom2k5 hat geschrieben:
Aha,danke erstmal-aber-was ist ein "Rekursiver Prozeduren Aufruf"?
http://de.wikipedia.org/wiki/Rekursion# ... erbeispiel
Gruss Christian
Verfasst: 22.10.2005 13:24
von Kiffi
> Aha,danke erstmal-aber-was ist ein "Rekursiver Prozeduren Aufruf"?
Eine Rekursion findet dann statt, wenn sich eine Prozedur selber aufruft.
Nachfolgend mal ein ziemlich einfach gehaltenes und unsinniges Beispiel
für eine Rekursion:
wie gesagt: der Code ist ziemlich unsinnig und stürzt nach einiger Zeit mit
einem Stapelüberlauffehler ab.
Zum Thema:
Hier ein kleiner Code, der alle MP3-Dateien auf Laufwerk C ermittelt und
ausgibt. Du kannst ihn leicht an Deine Bedürfnisse anpassen:
Code: Alles auswählen
NewList myMP3.s()
Procedure SearchFile(Folder.s, Wildcard.s)
Protected Search.s
Static DirID.l
If ExamineDirectory(DirID, Folder, "")
DirID + 1
Repeat
Type = NextDirectoryEntry()
If Type : Search = Trim(DirectoryEntryName()) : EndIf
If Type = 2
If Search <> "." And Search <> ".."
Search = Folder + Search + "\"
SearchFile(Search, Wildcard)
UseDirectory(DirID - 1)
EndIf
ElseIf Type = 1
If LCase(GetExtensionPart(Search)) = Wildcard
AddElement(myMP3())
myMP3()=Folder + Search
EndIf
EndIf
Until Type = 0
DirID - 1
EndIf
EndProcedure
SearchFile("c:\", "mp3")
ForEach myMP3()
Debug myMP3()
Next
Grüße ... Kiffi
Verfasst: 22.10.2005 15:44
von Tafkadasom2k5
ah danke kiffi-bist der beste...
Achja-biste eigentlich auch "Nicht Lustig"-Fan?Hab letztens innem Buchladen gestöbert und deinen Avatar in diesen Büchern gefunden-die Bücher sind echt hammergeil!
In dem Sinne...
Der Marc

Verfasst: 22.10.2005 19:52
von Tafkadasom2k5
Ok, ich bastel mir gerade sowas was kiffi gemacht hat nach-aber habe jetzt schon ne endlosschleife..was mache ich hier falsch?
Code: Alles auswählen
Procedure Fill_ListIconGadget(Directory.s)
Ordner = ExamineDirectory(#PB_Any,Directory,"*.mp3")
Repeat
Test = NextDirectoryEntry()
If Test = 1
AddGadgetItem(#Listicon_Stick,-1,DirectoryEntryName(),Image3)
EndIf
If Test = 2
AddGadgetItem(#Listicon_Stick,-1,DirectoryEntryName(),Image4)
EndIf
Until Test =0
EndProcedure
Ich komm ned weiter

..
Hock schon ne weile an dem Fehler und check ihn einfach ned.... *BUHUUU*
Danke für alle Rückmeldungen erstmal
DerMarc
Verfasst: 22.10.2005 20:56
von Konne
Ich seh da keine Endlosschleife. Also bei mir endets wenns fertig ist.
Ich hab nur bissle deinen Code modifiziert:
Code: Alles auswählen
Procedure Fill_ListIconGadget(Directory.s)
Ordner = ExamineDirectory(#PB_Any,Directory,"")
Repeat
Test = NextDirectoryEntry()
If Test = 1
Debug "File"
EndIf
If Test = 2
Debug "ordner"
EndIf
Until Test =0
EndProcedure
Fill_ListIconGadget("C:\")
Verfasst: 23.10.2005 01:14
von Kiffi
> Ok, ich bastel mir gerade sowas was kiffi gemacht hat nach
äääh, Dir ist aber schon klar, dass Du mit diesem Code nicht das von Dir
eingangs gewünschte Ziel ("Unterordner einbeziehen in Suche") erreichst,
oder?
Grüße ... Kiffi
Verfasst: 23.10.2005 01:54
von Konne
Ich schreib dir jetzt mal den Code von Kifi schön hin mit komentaren dann verstehst dus vielleicht
Code: Alles auswählen
NewList myMP3.s() ;Erstellt eine Linked List (Da sind nacher die Dateinamen drin
Procedure SearchFile(Folder.s, Wildcard.s) ;Öffnet die Procedure Wildcard ist das was gefunden werden soll zB "mp3"
Protected Search.s
Static DirID.l ;Das macht das die Variable NICHT auf 0 gesetzt wird wenn die Procedure beendet wird.
If ExamineDirectory(DirID, Folder, "") ;Startet die Ordner durchsuchung
DirID + 1 ;Ändert die DirID Variable so dass bei der Rekursiven aufrufung nicht wieder die gleiche wie zuvor genommen wird. DIES IST SEHR WICHTIG
Repeat ;Startet die Schleife in der der Ordner durchsucht wird
Type = NextDirectoryEntry() ;Gibt zurückt was der Eintrag ist (Also File,Ordner oder Nichts)
If Type : Search = Trim(DirectoryEntryName()) : EndIf ;Wenn der Ordner nicht am Ende ist
If Type = 2 ;Wenn Typ ein Ordner ist
If Search <> "." And Search <> ".." ;Wenn der Ordner nicht ".." oder "." ist. (Das musst du machen da Windows in jedem Ordner die Ordner ".." und "." anlegt
Search = Folder + Search + "\" ;geht einen Ordner weiter rauf
SearchFile(Search, Wildcard) ;Startet die Procedure nochmal !!!
UseDirectory(DirID - 1) ;Wenn die Procedure zuende ist wird wieder die alte DirID benutzt
EndIf
ElseIf Type = 1 ;Wenn es ein File ist
If LCase(GetExtensionPart(Search)) = Wildcard ;Schaut ob es die Wildcard "mp3" hat.
AddElement(myMP3())
myMP3()=Folder + Search ;Wenn es die richtige Wildcard hat kommt es in die Liste
EndIf
EndIf
Until Type = 0 ;Bis zum Ende des Ordners
DirID - 1 ;Vom Dir eins Abziehn
EndIf
EndProcedure
SearchFile("c:\", "mp3") ;Procedure starten
ForEach myMP3() ;Alle Elemente debuggen
Debug myMP3()
Next