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 :

[if] Condition sur des noms de répertoires [Débutant]


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 55
    Points
    55
    Par défaut [if] Condition sur des noms de répertoires
    Bonjour

    Dans mon programme j'utilise une boucle if elseif else avec plusieurs elseif, pour récupérer le nom de mon répertoire de travail. Lorsque je lance le programme, les deux premières conditions fonctionne, mais les autres me retourne une erreur. Pourtant toutes les lignes ont l'air d'être correcte.

    Voici les lignes où j'utilise la boucle:
    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
    for m = 1:h.nb_couleurs
        plot(h.Xpos{m}(:,3),h.mupos{m},'color',h.couleurs(m,:));
        xlabel('nombre de cycle', 'fontname','arial','fontsize',12,'fontweight','bold')
        ylabel('µ_a_p_p', 'fontname','arial','fontsize',12,'fontweight','bold')
        h.dx=legend(FileName{1},FileName{2},FileName{3},FileName{4},FileName{5},FileName{6},FileName{7},FileName{8},'Location','EastOutside');
        set(h.dx,'fontname','arial','fontsize',10);
        if PathName =='D:\PFE\essai_usure\resultats_2000c\Ag\'
            title({'Essais sur les échantillons Au 0.5µm et 1µm, 0.5N, 2000c, bille argent, diamètre 1.6 et 2.4mm','Evolution du coefficient de frottement ','en fonction du nombre de cycles (partie positive)'});
        elseif PathName == 'D:\PFE\essai_usure\resultats_2000c\Au\'
            title({'Essais sur les échantillons Au 0.5µm et 1µm, 0.5N, 2000c, bille or, diamètre 1.6 et 2.4mm','Evolution du coefficient de frottement ','en fonction du nombre de cycles (partie positive)'});
        elseif PathName == 'D:\PFE\essai_usure\resultats_2000c\Au1\'
            title({'Essais sur les échantillons Au 1µm, 0.5N, 2000c, bille or et argent, diamètre 1.6 et 2.4mm','Evolution du coefficient de frottement ','en fonction du nombre de cycles (partie positive)'});
        elseif PathName == 'D:\PFE\essai_usure\resultats_2000c\Au05\'
            title({'Essais sur les échantillons Au 0.5µm, 0.5N, 2000c, bille or et argent, diamètre 1.6 et 2.4mm','Evolution du coefficient de frottement ','en fonction du nombre de cycles (partie positive)'});
        elseif PathName == 'D:\PFE\essai_usure\resultats_2000c\diam16\'
            title({'Essais sur les échantillons Au 0.5µm et 1µm, 0.5N, 2000c, bille or et argent, diamètre 1.6','Evolution du coefficient de frottement ','en fonction du nombre de cycles (partie positive)'});
        else PathName == 'D:\PFE\essai_usure\resultats_2000c\diam24\'
            title({'Essais sur les échantillons Au 1µm, 0.5N, 2000c, bille or et argent, diamètre 2.4mm','Evolution du coefficient de frottement ','en fonction du nombre de cycles (partie positive)'});
        end
    end
    Est ce le fait d'utiliser == pour comparer la variable PathName qui est du texte?

    Il me retourne l'erreur suivante lorsque je veux aller dans le répertoire du 2éme elsif jusqu'au else:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ??? Error using ==> eq
    Matrix dimensions must agree.
     
    Error in ==> lecture6 at 49
        if PathName =='D:\PFE\essai_usure\resultats_2000c\Ag\'
    Merci de votre aide

  2. #2
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    On n'utilise effectivement == pour comparer des chaines de caractères.
    == fait la comparaison terme à terme donc si les 2 chaines n'ont pas la même longueur ça plante.
    On utilise plutôt STRCMP.

    Ceci dit dans ton cas plutôt que d'utiliser des IF, ELSEIF en pagaille, tu devrais essayer SWITCH/CASE ce serait beaucoup plus efficace (et lisible)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    switch PathName
    case 'repertoire1'
       %...
    case 'rep2'
       %...
    otherwise
       %...
    end
    Règles du Forum

    Adepte de la maïeutique

  3. #3
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Quelques améliorations : il faut sortir de la boucle tout ce qui n'a pas lieu d'y être, pourquoi répéter h.nb_couleurs fois la même instruction, tu pers en performances.
    Seul le PLOT a lieu de rester dans la boucle.
    Prends aussi l'habitude d'utiliser les ... (caractères de continuation) pour rendre ton code plus lisible.
    Les commentaires c'est bien aussi

    Sinon une autre solution pour ton titre, tu définis un tableau de cellules pour tes répertoires, un tableau de cellules correspondant pour tes titres et tu utilises STRMATCH.

    Ça donnerait (en mettant bien tous les répertoires et tous les titres) :
    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
    %Definition des repertoires et des titres (à compléter)
    reps={'D:\PFE\essai_usure\resultats_2000c\Ag\','D:\PFE\essai_usure\resultats_2000c\Au\'};
    titres = {'Essais sur les échantillons Au 0.5µm et 1µm, 0.5N, 2000c, bille argent, diamètre 1.6 et 2.4mm',...
        'Essais sur les échantillons Au 0.5µm et 1µm, 0.5N, 2000c, bille or, diamètre 1.6 et 2.4mm'};
     
    %Tracé des courbes
    for m = 1:h.nb_couleurs
        plot(h.Xpos{m}(:,3),h.mupos{m},'color',h.couleurs(m,:));
    end
     
    %On ne fait qu'une fois les instructions ci-dessous
    xlabel('nombre de cycle', 'fontname','arial','fontsize',12,'fontweight','bold')
    ylabel('µ_a_p_p', 'fontname','arial','fontsize',12,'fontweight','bold')
     
    %Modification ici au lieu d'écrire FileName{1},FileName{2},FileName{3},...
    h.dx=legend(FileName{:},...
        'Location','EastOutside');
    set(h.dx,'fontname','arial','fontsize',10);
     
    title({titres{strmatch(Pathname,reps)},...
        'Evolution du coefficient de frottement ',...
        'en fonction du nombre de cycles (partie positive)'});
    Règles du Forum

    Adepte de la maïeutique

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 55
    Points
    55
    Par défaut
    merci pour tes conseils et ton aide!!!

    J'ai préféré utiliser un switch/case, car je n'arrive pas à appliquer le code pour que se soit plus propre. Mais avec switch case ça marche trés bien.

    Merci beaucoup!!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/10/2007, 12h25
  2. boucle sur des noms de répertoires
    Par machmalabala dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 29/08/2007, 11h34
  3. Créer des allias sur des noms de champ
    Par 33ctdebut dans le forum Access
    Réponses: 3
    Dernier message: 02/03/2007, 10h47
  4. condition sur des checkbox
    Par bogsy15 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/08/2006, 09h28
  5. Possiblité d'utiliser des noms de répertoires
    Par vicelard dans le forum Access
    Réponses: 4
    Dernier message: 27/10/2005, 11h04

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