IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Problème de recursivité [Débutant]


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 22
    Points : 17
    Points
    17
    Par défaut Problème de recursivité
    Bonjour,

    Je travail en ce moment sur une fonction permettant de faire une recherche de répèrtoire sur le disque.
    Je met en paramètre le nom de dossier à trouver et le scan est lancé.
    Mon soucis est que j'arrive à afficher les chemin de dossier trouvé mais pas à les stockés dans une variable.

    Je m'explique voici mon code:

    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
     
    %=========================================================================%
    %Début de la fonction getAllFiles+++++++++++++++++++++++++++++++++++++++++%
    %=========================================================================%
    % Fonction parse du disque à tester
    function fileList = getAllFiles(dirName)
    searchDir = getappdata(gcbf,'valeur_de_searchDir');
    dirData = dir(dirName);      %# Get the data for the current directory
    dirIndex = [dirData.isdir];  %# Find the index for directories   
    folderList = {dirData(dirIndex).name}';  %'# Get a list of the folders  
    if ~isempty(fileList)    
        folderList = cellfun(@(x) fullfile(dirName,x),...  %# Prepend path to files                        
            folderList,'UniformOutput',false);   
    end
    subDirs = {dirData(dirIndex).name};  %# Get a list of the subdirectories
     
    validIndex = ~ismember(subDirs,{'.','..'});  %# Find index of subdirectories                                                
                                                 %#   that are not '.' or '..'
    [m,n] = size(subDirs); %# On relève les dimensions de subDirs
    for index = 1:n   
        monSubDir = regexpi(subDirs(index), searchDir, 'match');    
        if ~isempty(monSubDir{1,1})
            disp(folderList(index));        
        end
        index = index + 1;
    end
    for iDir = find(validIndex) %# Loop over valid subdirectories     
        nextDir = fullfile(dirName,subDirs{iDir});    %# Get the subdirectory path     
        fileList = [fileList; getAllFiles(nextDir)];  %# Recursively call getAllFiles   
    end
    %=========================================================================%
    %Fin de la fonction getAllFiles-------------------------------------------%
    %=========================================================================%

    Et la partie qui me pose problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for index = 1:n   
        monSubDir = regexpi(subDirs(index), searchDir, 'match');    
        if ~isempty(monSubDir{1,1})
            disp(folderList(index));        
        end
        index = index + 1;
    end
    Je voudrais changer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    disp(folderList(index));
    par une sauvegarde des éléments dans un tableau qui se met a jour au fur et a mesure que l'on revient dans la boucle.

    Je ne sais pas si c'est trés clair ..

    Merci d'avance pour toute aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Une remarque préliminaire:
    fileList de la ligne if ~isempty(fileList) ne semble pas être défini plus haut... ne serait-ce pas folderList?

    Ensuite, subDirs(index) dans ce contexte serait plus à mettre sous la forme subDirs{index}, viendrait alors if ~isempty(monSubDir) sans {1,1}.

    Mais tu peux très bien utiliser ton tableau de cellules en entier, ce qui te permettrait d'utiliser l'indexage logique et t'affranchir de la boucle for
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    idx = cellfun(@isempty, regexpi(subDirs, searchDir, 'match') );
    Dernière modification par Invité ; 21/09/2011 à 19h54.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    Merci pour ta réponse,

    En effet il s'agit bien de folderList petite erreur quand j'ai modifié le message car à l'origine la fonction listai les fichier d'ou le fileList.


    J'ai du mal a comprendre le fonctionnement des cellfun :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    idx = cellfun(@isempty, regexpi(subDirs, searchDir, 'match'));
    Le résultat de idx est logique 0 ou 1
    Que signifi le @ ?
    je ne suis pas quand même obligé d'utiliser une boucle "for" pour récupérer l'index de folderList?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    J'ai complétement repensé ma fonction qui comportait des redondance.
    Maintenant que je l'ai allégé je pense m'en sortir merci encore

    Je vais passer ce post en résolu

    merci Winjerome

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec la recursivité et les pointeurs en C
    Par mohsenuss91 dans le forum Débuter
    Réponses: 5
    Dernier message: 16/12/2013, 09h46
  2. Problème de recursivité sur download via ftp
    Par kciope dans le forum VB.NET
    Réponses: 1
    Dernier message: 03/06/2011, 14h02
  3. Recursivité et setIcone, problème de pile.
    Par Djobird dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 13/06/2006, 00h56
  4. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo