Lire des fichiers dans plusieurs dossiers differents sous matlab
Répondre à la discussion
Affichage des résultats 1 à 22 sur 22

Lire des fichiers dans plusieurs dossiers differents sous matlab



  1. #1
    caabet

    Lire des fichiers dans plusieurs dossiers differents sous matlab


    ------

    Bonjour ,
    j'ai des fichiers data sous formes 1, 2 ....ect qui se trouve dans differents dossiers , j'arrive a lire les data qui se trouve dans un seule dossier en enregistrant mon programme dans le dossier en question.
    Je veux maintenant pouvoir mettre au debut de mon programme une instructions dir qui me permettra de lire les data qui se trouve dans le dossier1 puis qui passera apres aux datas qui se trouve dans le dossier 2 qui se trouve ailleurs.
    Voici mon code pour les mes data:
    Code:
    for k=kmin:kmax
        textFileName = num2str(k);
        
    if exist(textFileName)
        disp(textFileName);
        fid = fopen(textFileName, 'rt');
        a = fscanf(fid,'%f',[3 inf]);
         a=a.';
         
       t=a(:,1);
       x=a(:,2);
       y=a(:,3);
       if tmax < length(t)
          
           tmax=length(t);
            T=t;
       end
       fclose(fid);
    
      else
        fprintf('le fichier %s nexiste pas.\n',textFileName);
    end
    
    end
    Merci.

    -----

  2. #2
    Antoane
    Responsable technique

    Re : Lire des fichiers dans plusieurs dossiers differents sous matlab

    Bonjour,

    Il est possible d'utiliser le chemin complet dans fopen, par exemple :
    Code:
    fopen('C:/users/caabet/mesdoc/folder_1/1')
    ou partiel depuis le PWD :
    Code:
    fopen('folder_1/1')
    Sachant qu'il est possible de concaténer les strings :
    Code:
    path = 'folder_1\'
    fopen([path, textFileName])
    PS : pense à correctement indenter ton code. Ca se fait aisément sous matlab en sélectionnant tout (CTRL+A) puis avec CTRL+I.
    Dernière modification par Antoane ; 11/06/2019 à 16h58.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  3. #3
    caabet

    Re : Lire des fichiers dans plusieurs dossiers differents sous matlab

    Citation Envoyé par Antoane Voir le message
    Bonjour,

    Il est possible d'utiliser le chemin complet dans fopen, par exemple :
    Code:
    fopen('C:/users/caabet/mesdoc/folder_1/1')
    ou partiel depuis le PWD :
    Code:
    fopen('folder_1/1')
    Sachant qu'il est possible de concaténer les strings :
    Code:
    path = 'folder_1\'
    fopen([path, textFileName])
    PS : pense à correctement indenter ton code. Ca se fait aisément sous matlab en sélectionnant tout (CTRL+A) puis avec CTRL+I.
    Merci pour ta reponse.
    le probleme c'est que en mettant
    Code:
     fopen('folder_1/1')
    je reste toujours dans le même dossier folder_1 et moi je vaudrai qu'il passe par les autres dossiers.

  4. #4
    Paraboloide_Hyperbolique

    Re : Lire des fichiers dans plusieurs dossiers differents sous matlab

    Bonjour,

    Il n'est pas nécessaire de se trouver dans le même dossier que celui des fichiers pour les ouvrir et les lire. Si vous y tenez, voyez la commande "cd".

  5. A voir en vidéo sur Futura
  6. #5
    pm42

    Re : Lire des fichiers dans plusieurs dossiers differents sous matlab

    Citation Envoyé par Paraboloide_Hyperbolique Voir le message
    Il n'est pas nécessaire de se trouver dans le même dossier que celui des fichiers pour les ouvrir et les lire. Si vous y tenez, voyez la commande "cd".
    A quoi va lui servir «*cd*» dans un programme ?

    Dans son cas, il faudrait qu’il précise ce qu’il veut faire notamment si le nombre et le nom des répertoires est connu à l’avance mais si c’est le cas, la réponse d’Antoane avec une boucle et la syntaxe avec un tableau marche.

    Le plus simple est sans doute d’utiliser la librairie Python glob qui permet de faire ça en 1 ligne.

  7. #6
    caabet

    Re : Lire des fichiers dans plusieurs dossiers differents sous matlab

    oui effectivement les noms des dossiers est connue mais c'est des noms aléatoires exemple : dossier1 , cool, programme0....ect

  8. #7
    invite73192618

    Re : Lire des fichiers dans plusieurs dossiers differents sous matlab

    Citation Envoyé par pm42 Voir le message
    A quoi va lui servir «*cd*» dans un programme ?
    La même chose que dans le terminal: changer le dossier courant. Par exemple si tu es dans un dossier racine avec des fichiers à lire dans des dossiers enfants numérotés de 1 à 17, il est possible d'écrire quelque chose comme

    Code:
    for i = 1:17
        eval(['cd ' + int2str(i)])
        dowhatyoumustdo
        cd ..
    end
    ...pas le champion du monde en terme de portabilité, mais pour les utilisateurs de matlab ce n'est pas habituellement important. Une meilleure alternative est de faire une liste des chemins. Par ailleurs utiliser dir() permet de ne pas trop se préoccuper de ce qu'il y a comme nom de dossier.

    Code:
    maliste= dir(*/*.m)
    for i = 1:size(maliste,2)
        dowhatyoumustdowith(maliste(i))
    end
    (PS: code non testé)
    Dernière modification par Jiav ; 11/06/2019 à 22h22.

  9. #8
    pm42

    Re : Lire des fichiers dans plusieurs dossiers differents sous matlab

    Oups j’ai lu le code trop vite sur un téléphone et j’ai cru voir du python. D’où mes remarques à côté de la plaque.

  10. #9
    Antoane
    Responsable technique

    Re : Lire des fichiers dans plusieurs dossiers differents sous matlab

    Bonjour,

    Le principal est que ca marche, mais je trouve également que le cd, c'est moche
    de même : eval(['cd ' + int2str(i)]), sera avantageusement remplacé par cd(int2str(i)).

    si j'ai bien compris, il y a un certain nombre de fichiers, nommés, par exemple '1' à '17', dans divers dossiers. Dans l'ensemble des dossiers, il y a un unique fichier de chaque nom mais la répartition par dossier est inconnue a priori. Il n'y a pas deux fichiers de même nom dans deux dossiers différents (par exemple, il n'est pas possible de trouver le fichier '1' dans 'cool/1' et dans 'chien/1').

    Si tout les dossiers contenant les fichier intéressants ont pour racine un même dossier appellé par exemple 'root_myFiles', il est possible de simplifier la recherche :
    Code:
    rootPath = 'root_myFiles'
    addpath(genpath(rootPath))
    
    for k=kmin:kmax
        textFileName = num2str(k);
        
        if exist(textFileName)
            disp(textFileName);
            fid = fopen(textFileName, 'rt');
            ...
        end
    end
    La ligne "addpath(genpath(rootPath) )" permettant à Matlab de savoir qu'il doit chercher dans tous les dossiers situés plus bas dans l'arborescence que rootPath.
    rootPath peut être le chemin complet vers le dossier (par exemele 'C:/users/mesDoc/root_myFiles) ou bien le chemin partiel depuis le pwd (par exemple : '../data/root_myFiles').
    Dernière modification par Antoane ; 12/06/2019 à 07h39.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  11. #10
    caabet

    Re : Lire des fichiers dans plusieurs dossiers differents sous matlab

    Bonjour, pour les fichiers de 1 a 17 par exemple ils ne sont pas unique car dans chaque dossier on peut trouver les d'autre fichiers 1,2,3....ect avec d'utre donnée .

    Citation Envoyé par Antoane Voir le message
    Bonjour,

    Le principal est que ca marche, mais je trouve également que le cd, c'est moche
    de même : eval(['cd ' + int2str(i)]), sera avantageusement remplacé par cd(int2str(i)).

    si j'ai bien compris, il y a un certain nombre de fichiers, nommés, par exemple '1' à '17', dans divers dossiers. Dans l'ensemble des dossiers, il y a un unique fichier de chaque nom mais la répartition par dossier est inconnue a priori. Il n'y a pas deux fichiers de même nom dans deux dossiers différents (par exemple, il n'est pas possible de trouver le fichier '1' dans 'cool/1' et dans 'chien/1').

    Si tout les dossiers contenant les fichier intéressants ont pour racine un même dossier appellé par exemple 'root_myFiles', il est possible de simplifier la recherche :
    Code:
    rootPath = 'root_myFiles'
    addpath(genpath(rootPath))
    
    for k=kmin:kmax
        textFileName = num2str(k);
        
        if exist(textFileName)
            disp(textFileName);
            fid = fopen(textFileName, 'rt');
            ...
        end
    end
    La ligne "addpath(genpath(rootPath) )" permettant à Matlab de savoir qu'il doit chercher dans tous les dossiers situés plus bas dans l'arborescence que rootPath.
    rootPath peut être le chemin complet vers le dossier (par exemele 'C:/users/mesDoc/root_myFiles) ou bien le chemin partiel depuis le pwd (par exemple : '../data/root_myFiles').

  12. #11
    Antoane
    Responsable technique

    Re : Lire des fichiers dans plusieurs dossiers differents sous matlab

    Donc tu sais que tu doit, par exemple aller chercher :
    - les fichiers 1, 3 et 6 dans le dossier 'chien',
    et :
    - les fichier 2, 4 et 5 dans le dossier 'cool' ?
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  13. #12
    caabet

    Re : Lire des fichiers dans plusieurs dossiers differents sous matlab

    oui exactement mais je doit lire tous les fichiers qui se trouve dans chaque dossier donc par exemple pour le dossier 'chien' 1 j'ouvre avec
    Code:
    for k=1:6
        
        textFileName = num2str(k);
        
        if exist(textFileName)
            disp(textFileName);
            
            fid = fopen(textFileName, 'rt')
    .......end;
    et apres je ferai la passerai au dossier 'cool' pour lire les fichiers qui se trouvent dedant portant les même numéros donc
    Code:
     for k=1:6 ....end

  14. #13
    Antoane
    Responsable technique

    Re : Lire des fichiers dans plusieurs dossiers differents sous matlab

    Code:
    folderList = { % list of the folders of interest.
        'chien'
        'cool'} ;
    
    for k_folder=1:numel(folderList) % for each element of folderList
        currentFolder = folderList{k_folder} ;
        listOfFiles = ls(currentFolder) ; % list of files in the current folder
        
        for k_files = 1:numel(listOfFiles) % for each file in listOfFiles
            try % handles errors
                textFileName = listOfFiles(k_files, :) ; % name of the current file in the current folder
                fid = fopen([currentFolder, '\', textFileName], 'rt'); % open the current file in the current folder
                a = fscanf(fid,'%f',[3 inf]);
                ...
                fclose(fid) ;
            
                disp([currentFolder, '\', textFileName])
            end
        end
    end
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  15. #14
    caabet

    Re : Lire des fichiers dans plusieurs dossiers differents sous matlab

    En appliquant le code mon programme ne reconnais plus a a cause de sa definition dans:
    Code:
    fid = fopen([currentFolder, '\', textFileName], 'rt');
                a = fscanf(fid,'%f',[3 inf]);
                a=a.';
                t=a(:,1);
                x=a(:,2);
                y=a(:,3);
    donc je ne peux pas accéder au t, x, y

    Citation Envoyé par Antoane Voir le message
    Code:
    folderList = { % list of the folders of interest.
        'chien'
        'cool'} ;
    
    for k_folder=1:numel(folderList) % for each element of folderList
        currentFolder = folderList{k_folder} ;
        listOfFiles = ls(currentFolder) ; % list of files in the current folder
        
        for k_files = 1:numel(listOfFiles) % for each file in listOfFiles
            try % handles errors
                textFileName = listOfFiles(k_files, :) ; % name of the current file in the current folder
                fid = fopen([currentFolder, '\', textFileName], 'rt'); % open the current file in the current folder
                a = fscanf(fid,'%f',[3 inf]);
                ...
                fclose(fid) ;
            
                disp([currentFolder, '\', textFileName])
            end
        end
    end

  16. #15
    invite73192618

    Re : Lire des fichiers dans plusieurs dossiers differents sous matlab

    Citation Envoyé par caabet Voir le message
    En appliquant le code mon programme ne reconnais plus a a cause de sa definition dans: (...) donc je ne peux pas accéder au t, x, y
    Ton message est difficile à comprendre. Perso je comprend

    Mille merci Antoane!! Par contre j'ai maintenant un autre problème, je ne sais pas comment accéder au t,x,y en dehors de la boucle. Je sais que j'abuse, mais pourrais-tu m'aider avec ça aussi?"

    Si c'est une bonne description de ton nouveau problème, une méthode de résolution est d'utiliser un compteur.

    Code:
    cp = 0
    for k_folder....
    ....
        for k_files....
            try 
                cp = cp + 1
                ....
                t(cp) = ....
                x(cp) = ....
    ....

  17. #16
    caabet

    Re : Lire des fichiers dans plusieurs dossiers differents sous matlab

    Et mille merci a toi Antoane.
    Citation Envoyé par caabet Voir le message
    En appliquant le code mon programme ne reconnais plus a a cause de sa definition dans:
    Code:
    fid = fopen([currentFolder, '\', textFileName], 'rt');
                a = fscanf(fid,'%f',[3 inf]);
                a=a.';
                t=a(:,1);
                x=a(:,2);
                y=a(:,3);
    donc je ne peux pas accéder au t, x, y

  18. #17
    caabet

    Re : Lire des fichiers dans plusieurs dossiers differents sous matlab

    Merci pour ta réponse Jiav ,
    j'ai déjà essayé d'utiliser un compteur mais toujours pas de résultats, je ne comprends pas pourquoi il n'arrive pas a lire les données dans 'a'.

  19. #18
    invite73192618

    Re : Lire des fichiers dans plusieurs dossiers differents sous matlab

    Essaie d'ajouter...
    Code:
    disp([currentFolder, '\', textFileName])
    ...juste avant le code de lecture afin de savoir sur quel fichier il bloque. Ensuite essai ton bout de code lecture directement (en te déplaçant 'à la main'). S'il marche alors il y a un problème de code dans le programme principal, possiblement une collision entre des noms de variables. S'il ne marche pas alors le problème est dans ce bout de code, possiblement à cause de format incompatibles.

    PS: en cas de format incompatible un truc est d'utiliser une structure:
    Code:
    data(cp).t = ...
    data(cp).x = ...
    ...
    Dernière modification par Jiav ; 12/06/2019 à 15h26.

  20. #19
    caabet

    Re : Lire des fichiers dans plusieurs dossiers differents sous matlab

    Merci Jiav ;
    Je vais revoir le programme je pense que c'est une incompatibilité qui pause problème.

  21. #20
    Antoane
    Responsable technique

    Re : Lire des fichiers dans plusieurs dossiers differents sous matlab

    Bonjour,

    Tu peux éventuellement mettre l'un de tes fichier en PJ d'un message, ou en copier-coller les premières lignes dans un prochain message.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  22. #21
    caabet

    Re : Lire des fichiers dans plusieurs dossiers differents sous matlab

    Bonjour, voici mes premières lignes
    Code:
    clear all;
    close all;
    tmax=0;
    kmin=1;
    kmax=46;
    p=0;
    folderList = {'5bis','15bis','23bis'};
    for k_folder=1:numel(folderList)%pour chaque element de folderlist
        currentFolder = folderList{k_folder} ;
        listOfFiles = ls(currentFolder) ; % liste des fichiers dans currentFolder
        for k_files=kmin:numel(listOfFiles)
            
            textFileName = listOfFiles(k_files, :) ;
            
            if exist(textFileName)
                disp(textFileName);
                
                fid = fopen([currentFolder, '\', textFileName], 'rt');
                a = fscanf(fid,'%f',[3 inf]);
                a=a.';
                p=p+1;
                t(p)=a(:,1);
                x(p)=a(:,2);
                y(p)=a(:,3);
                if tmax < length(t)
                    
                    tmax=length(t);
                    T(p)=t(p);
                end
                fclose(fid);
                disp([currentFolder, '\', textFileName])
            else
                fprintf('le fichier %s nexiste pas.\n',textFileName);
            end
        end
        end
    Citation Envoyé par Antoane Voir le message
    Bonjour,


    Tu peux éventuellement mettre l'un de tes fichier en PJ d'un message, ou en copier-coller les premières lignes dans un prochain message.

  23. #22
    Antoane
    Responsable technique

    Re : Lire des fichiers dans plusieurs dossiers differents sous matlab

    Si tu regardes le contenu de listOfFiles, il va ressembler à :
    ['. '
    '.. '
    '1 '
    '2 ']

    où '1' et '2' sont effectivement des fichiers mais pas '.' et '..'. Cependant, exist('.') ne renvoi pas false, donc le programme va essayer de faire fopen('chien\.'), et va planter (fid = -1).
    C'est pourquoi j'avais mis les bloc "try ... catch" dans mon code de départ.
    Autre solution : commencer à k_files=3

    Tu devrais d'ailleurs voir s'afficher dans la console "chien/." avant que le programme plante
    Dernière modification par Antoane ; 13/06/2019 à 09h05.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

Discussions similaires

  1. lire plusieurs matrices d'un fichier text sur matlab
    Par dadou21 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 23/06/2014, 14h09
  2. Matlab: Comment exécuter matrice par matrice dans différents fichiers donnés?
    Par ellymimi dans le forum Programmation et langages, Algorithmique
    Réponses: 19
    Dernier message: 21/05/2014, 15h05
  3. Lire les fichiers ppt sous linux embarqué
    Par invite36d52cc8 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 15/09/2008, 22h48
  4. Copie de fichiers dans differents dossiers
    Par invite70eda27f dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 18/06/2008, 20h27
  5. Fichiers invisibles dans les dossiers.
    Par invitea250c65c dans le forum Logiciel - Software - Open Source
    Réponses: 19
    Dernier message: 04/08/2006, 21h10