Bonsoir, je veux avoir le nombre de sous dossier d'un dossier principal, afin de l'utiliser dans une boucle. Merci
Bonsoir, je veux avoir le nombre de sous dossier d'un dossier principal, afin de l'utiliser dans une boucle. Merci
Tu utilises la fonction dir et tu identifies les dossiers grâce au champs isdir de la structure renvoyée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 >> d = dir; >> idx = [d(:).isdir]; >> d = d(idx);
Bonsoir,
Plutôt d = dir('<chemin dossier principal>');.
Note : attention que la fonction dir prend aussi en compte le dossier parent '..' et dossier courant '.'
Peut on avoir le répertoire automatiquement? et est ce que le fichier père est inclus dans le nombre, je veux faire quelque chose qui ressemble à ça:
Sauf qu'ici ne s'agit pas de fichier txt mais des dossiers.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 PathName = uigetdir; d = dir(fullfile(PathName,'*.txt'));
Je possède un dossier qui contient 29 sous dossier. Quand j'applique ça se me donne 32:
Je pense qu'il compte à partir de la racine prinpale.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 >> PathName = uigetdir; >> d = dir(fullfile(PathName)); >> idx = [d(:).isdir]; d = d(idx); >> numel (d) ans = 32
Bonjour, oui apparemment c'est ça, donc pas de solution. Donc je dois saisir la valeur n avec input .
Bonjour,
Non ! il suffit d'enlever dossier parent '..' et dossier courant '.' de la liste renvoyée par dir(), filtrer par isdir, puis calculer length() de ce qu'il reste.Donc je dois saisir la valeur n avec input .
Salut! j'ai pas bien compris, je peux voir le code svp?pour lenght je pense que numel sera mieux non?
Comme précisé par Winjerome, dir() rajoute à la liste des fichiers/répertoire deux élements, nommés "." et ".."
ou encore plus proprement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 d= dir(...) length(d([d.dir])) -2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 d= d([d.dir] & ~ismember({d.name},{'.','..'})); length(d)
mais y'a pas une instruction qui indique mon dossier parent
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 >> d= d([d.dir] & ~ismember({d.name},{'.','..'})); Undefined variable "d" or function "d.dir".
Tu as oublié de faire
Comme précisé par Winjerome, remplace les ... par ton dossier parent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part d= dir(...)
Le but c'est quand même de comprendre le code plutôt que de l’exécuter sans réfléchir ! dir(PARENT) va lister le contenu d'un répertoire PARENT, ce résultat est mise dans la variable d, puis on filtre ce résultat pour retenir les éléments qui t'intéresse.
Je sais bien que veut dire la commande dir sans me le dire, sauf que lorsque j'ai vu les ... j'ai pensé qu'il s'agit d'une nouvelle syntaxe.
Donc la soustraction de deux donne 30, alors que j'ai 31 sous dossier, y'a t'il un problème dans ce code?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 >> PathName = uigetdir; >> d = dir(fullfile(PathName)); >> idx = [d(:).isdir]; d = d(idx); >> numel (d) ans = 32
Le code marche chez moi, tu devrais recompter tes dossiers en prenant garde aux dossiers système / cachés. Commence par un petit nombre de répertoire pour le test !
Toujours la même chose, tantôt ça marche pour un dossier tantôt non!voila un dossier de moi de mai contient 31 jours (31 sous dossiers). Quand j'applique le code ça me donne toujours 32-2=30.
Utilise la seconde approche qui vérifie . et .. plutôt que -2 (des fois que les deux n'y soient pas !). Sinon, regarde par toi même les noms des fichiers listés et les répertoires pour voir celui qu'il manque et vérifier qu'il est vraiment manquant !
Le dossier principale DATA de répertoire: Document\Matlab\DATA, contient bien des sous dossiers nommés de 01 à 31. Le changement de répertoire donne toujours le même résultats.
Lequel est manquant dans la sortie de dir() ?
Voila, j'ai appliqué le code sur un moi de 29 jours, et l'autre de 31 jours:
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 >> dir(fullfile(PathName)) . 04 10 16 22 28 .. 05 11 17 23 29 .DS_Store 06 12 18 24 01 07 13 19 25 02 08 14 20 26 03 09 15 21 27 >> PathName = uigetdir; >> dir(fullfile(PathName)) . 04 10 16 22 29 .. 05 11 17 23 30 .DS_Store 06 12 18 24 31 01 07 13 19 26 02 08 14 20 27 03 09 15 21 28 >> d d = 32x1 struct array with fields: name date bytes isdir datenum
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager