Cours 4D : Récursivité

4D : Récursivité

Recherche de fichiers sur disques

Il est évident que pour chercher un fichier sur un disque, il faut ouvrir un volume et regarder son contenu, qui comme chacun sait, est constitué de dossiers et de fichiers. Nous en obtiendrons la liste grâce aux commandes
LISTE DES DOCUMENTS et LISTE DES DOSSIERS.
Une fois ces listes constituées, nous devrons :
1°) chercher la chaîne souhaitée dans chacun des éléments,
2°) à partir de la nouvelle liste de dossiers effectuer, dossier par dossier, une nouvelle recherche.
Le « niveau» de la recherche récursive dépendra du nombre de dossiers imbriqués les uns dans les autres. Dans le cas d’un disque dur, ce nombre est vraisemblablement raisonnable car il ne s’agit pas de la quantité totale de dossiers d’un disque dur, mais de la profondeur maximum de leurs imbrications.
(Ex : MonVolume/MesDocuments/MesImages/MesDessins/MaMaison/MaCuisine…)
La méthode ci-dessous vous permettra, en plus de trouver vos fichiers (le but n’est pas de concurrencer les outils de recherche fournis par les systèmes d’exploitation), de connaître le nombre maximum d’imbrications de dossiers dans votre machine.
Ce qui nous donne la méthode ci-dessous :
` *** Méthode FindOnVolumes *** Si (Nombre de parametres=0) TABLEAU TEXTE(◊_Path;1000) ◊ID:=0 TABLEAU TEXTE(_Volumes;0) LISTE DES VOLUMES(_Volumes) $n:=Taille tableau(_Volumes) _Volumes:=1 $RefWin:=Creer fenetre formulaire([RESULTS]; »Search »;Dialogue modal ) DIALOGUE([RESULTS]; »Search ») PROPRIETES PLATE FORME($plateforme;$systeme;$Machine) Si ($Plateforme=Windows ) ◊Separator:= »/ » Sinon ◊Separator:= »: » Fin de si ◊Level:=0 ◊LevelMax:=0 Si (ok=1) & (◊String# » ») TOUT SELECTIONNER([RESULTS]) SUPPRIMER SELECTION([RESULTS]) FindOnVolumes (_Volumes{_Volumes}) `Appel récursif
`on enregistre ce qui n’a pas encore été stocké `(les résultats ont été stockés 1000 par 1000, on traite `les éléments du tableau non stockés)
REDUIRE SELECTION([RESULTS];0)
SUPPRIMER LIGNES(◊_Path;◊ID+1;1000) `on supprime ce qui dépasse 🙂 TABLEAU VERS SELECTION(◊_Path;[RESULTS]Value) ALERTE(« Niveau maximum de hiérarchie : « +Chaine(◊LevelMax)) `et voilà, c’est fini. FERMER FENETRE TOUT SELECTIONNER([RESULTS])
VISUALISER SELECTION([RESULTS]) Fin de si Sinon C_TEXTE($1) TABLEAU TEXTE($_Files;0) TABLEAU TEXTE($_Folders;0)
`——————————————-
LISTE DES DOSSIERS($1;$_Folders) $n:=Taille tableau($_Folders) Boucle ($i;1;$n) `Affichage du message de « progression » POSITION MESSAGE(1;1) $NewPath:=$1+◊Separator+$_Folders{$i} MESSAGE(« -> « +$NewPath+( » « *30)) `recherche de la chaîne dans le nom du dossier $pos:=Position(◊String;$_Folders{$i}) Si ($Pos>0) ◊ID:=◊ID+1 ◊_Path{◊ID}:=$1+◊Separator+$_Folders{$i} Si (◊ID>=1000) REDUIRE SELECTION([RESULTS];0) TABLEAU VERS SELECTION(◊_Path;[RESULTS]Value) ◊ID:=0 Fin de si Fin de si `CALCUL DU NOMBRE MAXI DE DOSSIER IMBRIQUÉS `on s’apprète à rappeler la méthode, on incrémente le niveau ◊Level:=◊Level+1 Si (◊Level>◊LevelMax) ◊LevelMax:=◊Level Fin de si FindOnVolumes ($NewPath) `*** Appel récursif *** `Une fois la méthode terminée, on décrémente le niveau ◊Level:=◊Level-1
Fin de boucle
`——————————————-
LISTE DES DOCUMENTS($1;$_Files) $n:=Taille tableau($_Files) Boucle ($i;1;$n) `recherche de la chaîne dans le nom du fichier $pos:=Position(◊String;$_Files{$i}) Si ($Pos>0) ◊ID:=◊ID+1 ◊_Path{◊ID}:=$1+◊Separator+$_Files{$i} Si (◊ID>=1000) REDUIRE SELECTION([RESULTS];0) TABLEAU VERS SELECTION(◊_Path;[RESULTS]Value) ◊ID:=0 Fin de si Fin de si Fin de boucle Fin de si

Cours gratuitTélécharger le cours complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *