Récursivité ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Récursivité ?

Message par SPH »

Bonjour a tous,

Je ne sais pas comment on fait pour lister tous les fichiers d'un certain type dans tous les sous repertoires d'un chemin. J'ai bien cherché sur le forum mais Dobro a viré son post...

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

Re: Récursivité ?

Message par boddhi »

Salut SPH.

Tout est dans l'aide...

Code : Tout sélectionner

If ExamineDirectory(0,"C:\","*.jpg")
  While NextDirectoryEntry(0)
    If DirectoryEntryType(0)=#PB_DirectoryEntry_File
       ...
    EndIf
  Wend
  FinishDirectory(0)
EndIf
Ton projet avance ?
lepiaf31
Messages : 510
Inscription : dim. 25/mars/2007 13:44
Localisation : Toulouse, France
Contact :

Re: Récursivité ?

Message par lepiaf31 »

Code : Tout sélectionner

Procedure examine(path.s)
  Protected dir.i
  
  If Right(path, 1) <> "\"
    path + "\"
  EndIf
  
  dir = ExamineDirectory(#PB_Any, path, "*.*")
  If dir
    While NextDirectoryEntry(dir)
      Debug path + DirectoryEntryName(dir)
      If DirectoryEntryType(dir) = #PB_DirectoryEntry_Directory And DirectoryEntryName(dir) <> "." And DirectoryEntryName(dir) <> ".."
        examine(path + DirectoryEntryName(dir))
      EndIf
    Wend
    FinishDirectory(dir)
  EndIf
EndProcedure
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Récursivité ?

Message par SPH »

Vos codes ne permettent pas de rentrer dans tous les repertoires. Je me demande si je ne vais pas eliminer cette option finalement...
boddhi a écrit :Ton projet avance ?
Doucement mais surement

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
lepiaf31
Messages : 510
Inscription : dim. 25/mars/2007 13:44
Localisation : Toulouse, France
Contact :

Re: Récursivité ?

Message par lepiaf31 »

SPH a écrit :Vos codes ne permettent pas de rentrer dans tous les repertoires.
Heu désolé mais mon code permet de voir tous les sous repertoires ...
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: Récursivité ?

Message par SPH »

lepiaf31 a écrit :
SPH a écrit :Vos codes ne permettent pas de rentrer dans tous les repertoires.
Heu désolé mais mon code permet de voir tous les sous repertoires ...
Ce que j'appelle peut etre a tord la recursivité, c'est de partir de C:/ et d'arriver a fouiller dans c:/tmp/001/k/rep
Nan mais laisse tomber, je n'en ai pas besoin en fait. Merci

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: Récursivité ?

Message par Chris »

SPH a écrit :Ce que j'appelle peut etre a tord la recursivité, c'est de partir de C:/ et d'arriver a fouiller dans c:/tmp/001/k/rep
C'est bien la récursivité.

C'est peut-être ça que tu cherches.

Code : Tout sélectionner

Procedure Scan_Directory(Dir$,  Pattern$ = "*.*", Id = 0)
  If Right(Dir$, 1) <> "\" : Dir$ + "\" : EndIf
  
  If ExamineDirectory(Id, Dir$, "")
    While NextDirectoryEntry(Id)
      Nom$ = DirectoryEntryName(Id)
      Type  = DirectoryEntryType(Id)
      
      Select Type         
        Case #PB_DirectoryEntry_File
          FullName$ = Dir$ + Nom$
          If GetExtensionPart(FullName$) = Pattern$
            Debug FullName$
          EndIf
          
        Case #PB_DirectoryEntry_Directory
          If Nom$ <> "." And Nom$ <> ".."
            FullName$ = Dir$ + Nom$
            Debug FullName$
            
            Scan_Directory(FullName$, Pattern$, Id + 1)
          EndIf     
      EndSelect
    Wend
    
    FinishDirectory(Id)
    ProcedureReturn
  EndIf 
  
  
EndProcedure

Mon_Chemin$ = "C:\Program Files\PureBasic\"
Mon_Extension$ = "pb"

Scan_Directory(Mon_Chemin$, Mon_Extension$, 0)

Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

Re: Récursivité ?

Message par GeBonet »

OU encore... De je ne sais plus qui ??? :lol:

Code : Tout sélectionner

; *******************************************************************
;   ARBORESCENCES  - Liste de répertoire et fichiers... 
;
; *******************************************************************
#ImgFile = 1
#ImgFold = 2
;
Global Tree_0
;{- Images du TreeGadget
    If CreateImage ( #ImgFile , 16, 16)
        StartDrawing ( ImageOutput ( #ImgFile ))
        Box (0, 0, 16, 16, $8FF7F7)
        DrawText (3,0, "F" , $0306F8,$86F7F7)
        StopDrawing ()
    EndIf
    ;
    If CreateImage ( #ImgFold , 16, 16)
        StartDrawing ( ImageOutput ( #ImgFold ))
        Box (0, 0, 16, 16, $8FF7F7)
        DrawText (3,0, "D" , $FF0000,$86F7F7)
        StopDrawing ()
    EndIf
;}-
;-Procédures Recursive... 
Procedure ListeFichiers(NumDir.l, NameDir.s, Ext.s)
    
    File.s : NameDir = Trim (NameDir)
    ; Vérification de la chaine
   If Right (NameDir,1) = "." : NameDir = Left (NameDir, Len (NameDir)-1) : EndIf
   If Right (NameDir,1)<> "\" : NameDir+ "\" : EndIf
 
   ; Vérification de l'extension
   If Right (Ext, 1) = "*" Or Ext = ""
    NoExt = #True
   Else
        If FindString (Ext, "." , 1)
            Ext = GetExtensionPart (Ext) : NoExt = #False
        Else
            Ext = Ext : NoExt = #False
        EndIf
   EndIf
 
   If ExamineDirectory (NumDir, NameDir, "*.*" )
        While NextDirectoryEntry (NumDir)
        File = DirectoryEntryName (NumDir)
     
        Select DirectoryEntryType (NumDir)
            Case #PB_DirectoryEntry_File
         
                Select NoExt
                    Case #True
                        ; ********** Avec extension *********
                        AddGadgetItem (Tree_0, -1, File, ImageID ( #ImgFile ), NumDir)
                        ; ***********************************
                     Case #False
                           ;*********** Sans Extension *********
                           If GetExtensionPart (File) = Ext
                             AddGadgetItem (Tree_0, -1, File, ImageID ( #ImgFile ), NumDir)
                           
                           EndIf
                           ; ***********************************
                EndSelect
            Case #PB_DirectoryEntry_Directory
                If DirectoryEntryName (NumDir) <> "." And DirectoryEntryName (NumDir) <> ".."
                    ; ***********************************
                    AddGadgetItem (Tree_0, -1, DirectoryEntryName (NumDir), ImageID ( #ImgFold ), NumDir)
                    ;
                    ; ************  ICI ***********************
                    ListeFichiers(NumDir +1, NameDir + File, Ext)
                    ;
                EndIf
            EndSelect
        Wend
        FinishDirectory (NumDir)
    EndIf
EndProcedure
 
If OpenWindow (0, 5, 5, 400, 543, "Tree" , #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    Tree_0 = TreeGadget ( #PB_Any , 5, 5, 390, 535)
EndIf

; FICHIERS CONCERNES ou répertoire de départ 
;                
Chem$ = "C:\0 0 PureBasic46\PureBasic"  ; <<==== ICI La base du répertoire de la recherche 
ExtensionA_Chercher$ = "*.pb"            ; <<==== ICI L'extension ou base de fichier a rechercher 
; 
ListeFichiers(0, Chem$, ExtensionA_Chercher$)
;
Repeat
  Event = WaitWindowEvent ()
Until Event = #PB_Event_CloseWindow
End 
Windows 7 et Windows 8.1 Pb 5.0 jusque 5.24 Lts 64 et 5.3 (64)/b]
“Ceux qui rêvent éveillés ont conscience de mille choses qui échappent à ceux qui ne rêvent qu’endormis.”
-Edgar Allan Poe-
Répondre