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 dans mon instruction switch


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kawther
    Inscrit en
    Avril 2006
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2006
    Messages : 307
    Par défaut problème dans mon instruction switch
    bonjour;
    j'ai une variable var de type string selon sa valeur je veux faire un traitement, mon code est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    switch var
    case '<petite>..' % si la valeur de la chaine var commence par '<petite>'
     %traitement
    end
    comment je peux impléménter ceci.
    d'anvance merci.

  2. #2
    Expert confirmé
    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
    Par défaut
    Cela dépend, les chaines de caractères dans les CASE auront toujours la même longueur ?
    Si oui : c'est possible, sinon je ne crois pas, enfin pas aussi simplement.

    Peux-tu donner un exemple un peu plus long (avec plusieurs CASE)

  3. #3
    Membre éclairé Avatar de kawther
    Inscrit en
    Avril 2006
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2006
    Messages : 307
    Par défaut
    ok voici une partie de 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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    case {'003C' '003E' '002B' '002A' '002F' '002A' '002C'}
                if i+3<=num
                    xmx=com(i+3).c_min;
                else
                    xmx=10000000000;
                end
                if i-2>0
                    xmn=com(i-2).c_max;
                else
                    xmn=0;
                end
               [LCB,xminD,xmaxD,yminD,ymaxD,s2]=calculate_bellow(com(i),com,num,xmn,xmx);
               if (s2==1)&&(strcmp(LCB(1).code,'2212')==1)
                    %   figure(i);    
                            com_aff(k).a=imcrop(BW1,[min(com(i).c_min-1,LCB(1).c_min-1) com(i).l_min-1 max(com(i).c_max,LCB(1).c_max)-min(com(i).c_min,LCB(1).c_min)+1 LCB(1).l_max-com(i).l_min+1]);
                            com_aff(k).c_min=min(com(i).c_min,LCB(1).c_min);
                            com_aff(k).c_max=max(com(i).c_max,LCB(1).c_max);
                            com_aff(k).l_min=min(com(i).l_min,LCB(1).l_min);
                            com_aff(k).l_max=max(com(i).l_max,LCB(1).l_max);
                            com_aff(k).code='003D';
                            %figure;
                            %imshow(com_aff(k).a);
                            i=i+2;
               else
                     %   figure(22);
                      %  uicontrol('style','text',...
                       %    'units','normalized',...
                        %   'position',[0.7 0.7 0.3 0.2],...
                         %  'string',[num2str(s2),'  ',num2str(s1)]);
                        com_aff(k).a=com(i).a;
                        com_aff(k).c_min=com(i).c_min;
                        com_aff(k).c_max=com(i).c_max;
                        com_aff(k).l_min=com(i).l_min;
                        com_aff(k).l_max=com(i).l_max;
                        i=i+1;
               end
               com_aff(k).ul='OP';  
               k=k+1;
            %%%%%%%%%%%%%%% lexical unit superscript %%%%%%%%%%%%%%%%%%%
            case {'<petite>0028' '<petite>0029' '<petite>005B' '<petite>005D' '<petite>007B' '<petite>007D' '<petite>007C'}
                com_aff(k).a=com(i).a;
                com_aff(k).c_min=com(i).c_min;
                com_aff(k).c_max=com(i).c_max;
                com_aff(k).l_min=com(i).l_min;
                com_aff(k).l_max=com(i).l_max;
                com_aff(k).ul='SD';
                k=k+1;
                i=i+1;
    pour le deuxième case j'ai pensé à faire une instruction qui cherche toutes les chaines qui commence par <petite>, j vous rappelle que toutes le chaines ont la même longueur, en fait toujours j'ai 4 caractère après <petite>.

  4. #4
    Expert confirmé
    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
    Par défaut
    Donc la réponse est non.
    Il aurait fallu pouvoir comparer les n 1ers termes de la variables var.
    Car :
    Citation Envoyé par doc switch
    A string switch_expr matches
    a case_expr if strcmp(switch_expr,case_expr) returns logical 1 (true).
    Donc le STRCMP implique qu'il y ait égalité parfaite.

    Dans ce cas (le problème étant que je ne sais pas si tu as d'autres CASE) mieux vaut passer par un IF/ELSE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if strncmp(var,'<petite>',8) %var commence par <petite>
       %bla
    else
       %bma
    end

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Citation Envoyé par Caro-Line Voir le message
    Donc le STRCMP implique qu'il y ait égalité parfaite.
    Il est possible d'ajouter des caractères avant la comparaison, comme des espaces :

    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
    str = {'AA' 'BBB' 'CCCC'};
     
    for n=1:numel(str)
     
        temp = str{n};
        temp(end+1:4) = ' ';
     
        switch temp
     
            case 'AA  '
                disp(str{n})
            case 'BBB '
                disp(str{n})
            case 'CCCC'
                disp(str{n})
     
        end
     
    end

  6. #6
    Membre éclairé Avatar de kawther
    Inscrit en
    Avril 2006
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2006
    Messages : 307
    Par défaut
    MERCI BIEN C'EST EXACTEMENT CE QUE JE CHERCHE.

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

Discussions similaires

  1. problème dans mon script
    Par kawther dans le forum Langage
    Réponses: 1
    Dernier message: 21/03/2007, 16h40
  2. Réponses: 13
    Dernier message: 17/10/2006, 15h35
  3. Problème dans une instruction Recordset
    Par jessy212 dans le forum Access
    Réponses: 2
    Dernier message: 29/08/2006, 10h42
  4. Problème dans mon JSP
    Par johnpelu dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 02/06/2006, 14h45
  5. [MySQL] Problème dans mon script de pagination
    Par speedylol dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/11/2005, 19h37

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