Bonjour,
Je planche depuis quelque temps sur un problème Scilab, je me permet donc de poster sur ce forum en espérant bénéficier de vos conseils.
Je souhaite mettre au point une fonction récursive à laquelle je passe en argument un chemin vers un répertoire. La fonction doit alors stocker dans une liste l'ensemble des chemins des fichiers (juste les fichiers, pas les répertoires) qu'elle trouvera en balayant le contenu de ce répertoire.
Voici le code auquel je suis arrivé pour l'instant :
Mon cas de figure : Il y a deux répertoires contenant chacun un répertoire. Ces derniers comprennent des fichiers textes. Ce n'est biensur qu'un exemple des nombreux de cas de figures possible.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 // Fonction recursive de parcours de repertoires function liste_fichiers = parcours_repertoire(chemin_courant) liste = []; // Test pour vérifier la présence du cractère '\' en fin de chemin taille_chaine = length(chemin_courant) if (part(chemin_courant,taille_chaine)~='\') then chemin_courant = chemin_courant + '\'; end fichiers = listfiles(chemin_courant); [nra,nca]=size(fichiers); for i=1:nra // On reconstitue le chemin entier avant de stocker // en effet listfiles ne renvoie que le nom relatif fichiers(i) = chemin_courant + fichiers(i); // Si le fichier est un répertoire, on relance le balayage de manière récursive if isdir(fichiers(i))then liste_fichiers = parcours_repertoire(fichiers(i)); else // Sinon on stocke simplement le chemin dans la liste à la suite ce qui précède liste(i) = fichiers(i); [nrb,ncb]=size(liste_fichiers); liste_fichiers(nrb+1)= fichiers(i); end end endfunction // Appel de la fonction liste_fichiers = [] chemin_repertoire = 'C:\Test' liste_fichiers = parcours_repertoire(chemin_repertoire)
Repertoire1->Repertoire11->Fichiers textes
Repertoire2->Repertoire21->Fichier textes
Le problème :
Je me retrouve avec un liste qui contient bien le nombre d'éléments voulus. Par exemple 50 lignes pour 50 fichiers. Mais seuls les chemins du répertoire 21 sont écrites en fin de liste. Le début de liste contient des lignes vides.
Liste_fichiers :
[]
[]
[]
...
Repertoire2->Repertoire21->blabla1.txt
Repertoire2->Repertoire21->blabla2.txt
...
Repertoire2->Repertoire21->blablaN.txt
J'imagine qu'il y a un problème de portée des variables... Je ne sais pas trop.
Je ne comprend pas pourquoi seulement le dernier répertoire traité est affiché correctement. J'ai testé avec une vingtaine de répertoire et le problème reste le même, toujours le dernier répertoire affiché, et pour ceux d'avant, des lignes vides...
Merci d'avance pour le coup de main!
Partager