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 :

listing particulier avec dir


Sujet :

MATLAB

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 206
    Points : 90
    Points
    90
    Par défaut listing particulier avec dir
    Bonjour,
    dans un programme, je souhaite ouvrir successivement plusieurs fichiers situés sous un même répertoire.
    Les fichiers à ouvrir se nomme Month01.mat, Month02.mat, ... Notez que dans le répertoire, il y a d'autres fichiers dont le nom est du style MonthAdd.mat (et autres) par exemple
    Je voudrais dresser au préalable une liste des fichiers qui m'intéresse.
    J'utilise pour cela la commande suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dirMonth=dir('Month*.mat');
    ainsi programmée, la structure dirMonth contient les noms de tous les fichiers commencant par Month et se terminant par .mat, y compris ceux qui ne m'intéresse pas (ceux du style MonthAdd.mat par ex).

    Comment utiliser cette commande dir pour qu'elle me retourne uniquement les fichiers dont le nom commence par Month suivi de 2 entiers et de .mat?
    J'ai essayé dir('Month??.mat') en m'inspirant des commandes linux mais ca ne marche pas.
    Merci de votre aide

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    Je pense que tu vas devoir passer par une étape supplémentaire en utilisant par exemple les expressions régulières:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dirMonth=dir('Month*.mat');
    tmp = {dirMonth.name};
    file_names = tmp(~cellfun(@(x) isempty(regexp(x, 'Month\d{3}\.mat', 'match')), tmp));
    Duf
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 206
    Points : 90
    Points
    90
    Par défaut
    Merci,
    ça marche très bien. C'est une solution compliquée mais qui me convient!!
    Je m'en vais maintenant voir ce qu'est une expression régulière.

    Quant à l'expression entre backslash, d{2}, le d est pour indiquer qu'il doit s'agir d'entiers?

    Bye

  4. #4
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Citation Envoyé par cpalperou Voir le message
    Quant à l'expression entre backslash, d{2}, le d est pour indiquer qu'il doit s'agir d'entiers?
    Exactement.
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 206
    Points : 90
    Points
    90
    Par défaut
    En utilisant ta méthode, file_name est une cell
    Comme j'aurais préféré une structure (le reste du prog traitant d'une structure contenant tous les noms des fichiers à ouvrir), je change ma cell en structure de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i=1:7 % si j'ai par exemple 7 fichiers d'intérêts
    dirM(i).name = file_name(i);
    end
    Ca marche, mais ce n'est pas très élégant! n'y a t'il pas mieux pour transformer une cell en structure?
    Merci

  6. #6
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Tout simplement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dirM = struct('name', file_name);
    Sinon tu as aussi la fonction CELL2STRUCT.
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 206
    Points : 90
    Points
    90
    Par défaut
    merci de ton aide

  8. #8
    Invité
    Invité(e)
    Par défaut
    Ou plus directement avec dirMonth :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dirMonth=dir('Month*.mat');
    tmp = {dirMonth.name};
    files = dirMonth(~cellfun(@(x) isempty(regexp(x, 'Month\d{2}\.mat', 'match')), tmp));
    files qui contiendra la même structure que la sortie de la fonction dir.

    Remarque : la fonction regexp acceptant un tableau de cellules en entrée, on peut effectuer une simplification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    files = dirMonth( ~cellfun(@isempty, regexp(tmp, 'Month\d{2}\.mat', 'match') ) )

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 206
    Points : 90
    Points
    90
    Par défaut
    Bonjour Winjerome,
    Ta 1ère solution fonctionne très bien, je l'ai adoptée! Merci
    Par contre et sauf erreur de ma part, ta deuxième solution ne marche pas: matlab retourne une erreur: "Unexpected matlab expression" au niveau de regexp!

  10. #10
    Invité
    Invité(e)
    Par défaut
    Es-tu sûr d'avoir bien recopié la ligne ? Ce genre d'erreur arrive lors d'un oubli de virgule séparant les instructions/paramètres, de fermer un string avec le guillemet simple ' ou autre chose dans ce genre.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 206
    Points : 90
    Points
    90
    Par défaut
    Au temps pour moi! J'avais oublié une virgule avant l'instruction regexp!
    Mes excuses!
    J'utiliserai donc cette simplification.

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

Discussions similaires

  1. liste déroulante avec ajout possible
    Par bachilbouzouk dans le forum ASP
    Réponses: 5
    Dernier message: 19/04/2005, 11h48
  2. liste déroulante avec données mysql
    Par fab44 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 24/02/2005, 19h45
  3. liste deroulante avec plusieurs champs
    Par JulienT dans le forum Struts 1
    Réponses: 4
    Dernier message: 20/04/2004, 17h17
  4. liste déroulante avec session
    Par leeloo076 dans le forum ASP
    Réponses: 3
    Dernier message: 19/03/2004, 11h01
  5. [LG]Listes chainées avec pointeur
    Par PaowZ dans le forum Langage
    Réponses: 2
    Dernier message: 17/02/2004, 19h49

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