| |
Posté le 07 juin 2018 - 15:26 |
Bonjour Est ce que quelqu'un a réussi avec la fonction fListeRépertoire de lister en récursif par exemple uniquement que 4 niveaux de dossiers Pour 4 niveaux x= un nombre indéfini Ex: c:\dossiers(x)\dossiers(x)\dossiers(x)\dossiers(X) et c'est tout même si il y encore plein de sous-dossiers Je ne vois pas comment faire Merci par avance |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 55 messages |
|
Posté le 07 juin 2018 - 15:43 |
Bonjour, je n'ai jamais utilisé cette fonction mais avec un TANTQUE nbTour < x ça ne fonctionnerait pas ?
-- Et bon dev ! Si vous avez des petits projets n'hésitez pas à me faire participer : DrTulipe0@gmail.com |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 80 messages Popularité : +2 (2 votes) |
|
Posté le 07 juin 2018 - 15:57 |
Bonjour
Tu peux réinterpréter le fListeRépertoire.
x est un entier = 4 sRépertoire est une chaîne = SysRep(srMesDocuments) + fSep
tabRépertoire est un tableau de chaînes POUR TOUTE chaîne sLeRépertoire de fListeRépertoire(sRépertoire,frRécursifSEPAREE PARAR RC sCompare est une chaîne = ChaîneSupprime(sLeRépertoire,sRépertoire,SansCasse) SI ChaîneOccurrence(sCompare,fSep) <= x ALORS TableauAjoute(tabRépertoire,sLeRépertoire) FIN FIN |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 309 messages Popularité : +31 (37 votes) |
|
Posté le 07 juin 2018 - 16:02 |
Bonjour, Si tu es certain que le chemin ne contient qu'un seul dossier par niveau, tu peux faire un flisterepertoire et ne garder que les 4 premières extractions sur RC
sListeRépertoire = fListeRépertoire(SysRep(srMesDocuments)) nbr est un entier POUR TOUTE chaîne sRep de sListeRépertoire SEPAREE PAR RC nbr++ SI nbr<5 ALORS Trace( sRep) FIN FIN
Sinon, tu comptes les \ de chaque résultats et ne garde que ceux qui en ont moins de 5 ....il y a surement plein de méthodes...
bon dev ! |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 281 messages Popularité : +24 (26 votes) |
|
Posté le 07 juin 2018 - 19:08 |
Bonsoir,
Il faut utiliser la fonction fListeRépertoire() avec une procédure de traitement car là même en "bidouillant" avec un incrément, fListeRépertoire() vous renvoi une chaîne contenant TOUS les sous-répertoires PUIS la boucle traite que les 4 premiers niveaux. Pas très performant votre solution !
nNiveau est un entier sRepRacine est une chaîne = "C:\MonRepertoire"
fListeRépertoire(sRepRacine, TraiteRepertoire, fCheminUNICODE+frRécursif)
PROCEDURE INTERNE TraiteRepertoire(LOCAL psRep est une chaîne, LOCAL psSousRep est une chaîne) nNiveau = ChaîneOccurrence(Remplace(psRep + ["\"] + psSousRep, sRepRacine, ""), "\") SI nNiveau = 5 ALORS RENVOYER Faux Trace(psRep + ["\"] + psSousRep) RENVOYER Vrai FIN Message modifié, 07 juin 2018 - 19:08 |
| |
| |
| | | |
|
| | |
| |
Posté le 08 juin 2018 - 08:28 |
Merci pour vos réponses Mais j'avais fait. En fait dans le programme que je suis entrain de faire le fListeRépertoire me liste tous les dossiers de un ou plusieurs Serveurs d'entreprise. Comme souvent ces serveurs contiennent plus milliers voir millions de dossiers (tous niveaux confondu). Le blocage (l'attente ...) du résultat se fait directement sur le résultat de fonction fListeRépertoire. (plusieurs heures d'attente) Et justement mon idée et ma question était de pouvoir signifier à la fonction de s'arrêter à un certain niveau de sous-dossier. Je crains fort que la fonction ne soit pas ouverte à ce genre d’aptitude. Il va falloir probablement que je passe par du .net A vous lire |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 26 messages |
|
Posté le 08 juin 2018 - 11:44 |
Brandon David a écrit :
Merci pour vos réponses Mais j'avais fait. En fait dans le programme que je suis entrain de faire le fListeRépertoire me liste tous les dossiers de un ou plusieurs Serveurs d'entreprise. Comme souvent ces serveurs contiennent plus milliers voir millions de dossiers (tous niveaux confondu). Le blocage (l'attente ...) du résultat se fait directement sur le résultat de fonction fListeRépertoire. (plusieurs heures d'attente) Et justement mon idée et ma question était de pouvoir signifier à la fonction de s'arrêter à un certain niveau de sous-dossier. Je crains fort que la fonction ne soit pas ouverte à ce genre d’aptitude. Il va falloir probablement que je passe par du .net A vous lire
Bonjour,
Dans la documentation de la fonction, il existe une seconde syntaxe :
Interruption de fListeRépertoire (Syntaxe 2)
Tant qu'il y a des répertoires à parcourir, la fonction fListeRépertoire ne peut pas être interrompue. Pour forcer l'interruption du parcours, utilisez la ligne suivante dans la procédure : RENVOYER Faux Dans ce cas, la fonction fListeRépertoire retourne le nombre de répertoires parcourus jusqu'à l'appel de "Renvoyer Faux". Dans les autres cas (pour poursuivre le parcours), la procédure DOIT renvoyer Vrai. Si la procédure retourne aucune valeur (ni Vrai, ni Faux), une erreur est générée.
Je n'ai pas testé mais cela devrait pouvoir vous aider avec une variable gérant le niveau.
Cordialement |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 281 messages Popularité : +24 (26 votes) |
|
Posté le 08 juin 2018 - 23:08 |
Bonsoir,
Le code que j’ai posté fait totalement le job mais bon... |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 26 messages |
|
Posté le 11 juin 2018 - 08:43 |
Damien a écrit :
Bonsoir,
Le code que j’ai posté fait totalement le job mais bon...
Bonjour,
Tout à fait Damien et excusez moi, je n'avais que survolé votre code et pas fait attention que vous aviez justement utilisé cette seconde syntaxe et une variable gérant le niveau.
Cordialement |
| |
| |
| | | |
|
| | |
| |
Posté le 12 juin 2018 - 07:55 |
Merci Damien pour le code effectivement cela marche nickel bien je n'y avais pas pensé Bon dev |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 165 messages Popularité : +12 (12 votes) |
|
Posté le 12 juin 2018 - 11:22 |
Bonjour;
Pour parcourir tous les sous répertoires jusqu'au niveau 4 de chacun En utilisant toujours le code proposé par Damien
nNiveau est un entier sRepRacine est une chaîne = "C:\WinDev 20"
fListeRépertoire(sRepRacine, TraiteRepertoire, fCheminUNICODE+frRécursif)
PROCEDURE INTERNE TraiteRepertoire(LOCAL psRep est une chaîne, LOCAL psSousRep est une chaîne) nNiveau = ChaîneOccurrence(Remplace(psRep + ["\"] + psSousRep, sRepRacine, ""), "\") SI nNiveau < 5 ALORS Trace(psRep + ["\"] + psSousRep) FIN FIN
Bon Dev.Message modifié, 12 juin 2018 - 11:25 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 281 messages Popularité : +24 (26 votes) |
|
Posté le 12 juin 2018 - 14:01 |
Ton code n’est pas bon Fouedsua, car tu n’a aucun RENVOYER dans la procédure interne. Et donc, il va effectivement écrire dans la trace les repertoires viulues mais aussi continuer le parcours des répertoires suivant... Perte de performances et inutile dans le cas voulu.
Il faut un RENVOYER Vrai pour continuer le parcours et un RENVOYER Faux pour le stopper. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 165 messages Popularité : +12 (12 votes) |
|
Posté le 13 juin 2018 - 01:02 |
Bonsoir; @Damien
Oui effectivement, et c'est ce qui est mentionné :
Pour parcourir tous les sous répertoires jusqu'au niveau 4 de chacun
et je pense que ça répond à la demande; c'est ce que j'ai compris en tout les cas. sinon s'il faut s’arrêter au 1er niveau 4 du 1er sous répertoire. ton code répond à la demande parfaitement.
Bon Dev.Message modifié, 13 juin 2018 - 01:03 |
| |
| |
| | | |
|
| | |