Bonjour,
Est il possible de créer un switch qui change son nombre de case en fonction d'une variable définie précedemment.
Bien sur, le code auu sein de chaque case dépendrait de cette variable.
Merci d'avance pour votre aide.
Version imprimable
Bonjour,
Est il possible de créer un switch qui change son nombre de case en fonction d'une variable définie précedemment.
Bien sur, le code auu sein de chaque case dépendrait de cette variable.
Merci d'avance pour votre aide.
Bonjour,
Je vois pas bien ce que tu veux faire :aie:
Pourrais-tu préciser ton problème (avec un exemple)?
Bonne journée,
Duf
euh a tous hasard des switch case imbriqué?
Je travaille en fait sur la réalisation d'une interface graphique permettant de visualiser sous forme de courbes des données issues d'un fichier Excel.
au sein du M-file de mon GUI, je récupère la taille d'un onglet de mon fichier excel et j'ai besoin de créer un switch dans un popup menu dont le nombre de 'case' dépend de cette taille.
le code de mon popup menu ressemblait à ça lorsque je définissais le nombre de cas:
Ce fichier contenait 57 cas (imaginez la galère!!!).Code:
1
2
3
4
5
6
7
8
9
10
11
12 val=get(hObject,'Value'); str=get(hObject,'String'); switch str{val} case 'P01' handles.num=handles.NUM(1); handles.current_data=xlsread(handles.nom_fic,handles.num,handles.posang); case 'P02' handles.num=handles.NUM(2); handles.current_data=xlsread(handles.nom_fic,handles.num,handles.posang);
Je me répète mais j'aimerais maintenant utiliser un switch ou autres dant le nombre de cas dépend de la taille du fichier excel utilisé.
Je changerais alors simplement le texte en rouge pour chaque case.
Pouvez-vous m'aider?
Bonjour jponsoda,
Pourquoi ne pas tout simplement récupérer le numéro qui se trouve dans str?Citation:
switch str{val}
case 'P01'
handles.num=handles.NUM(1);
handles.current_data=xlsread(handles.nom_fic,handles.num,handles.posang);
case 'P02'
handles.num=handles.NUM(2);
handles.current_data=xlsread(handles.nom_fic,handles.num,handles.posang);
Code:
1
2 n = str2num(str{val}(2:3)); handles.num=handles.NUM(n);
Ok, mais suis-je obligé d'utiliser un switch dans ces cas là.
car j'ai l'impression qu'un switch est indispensable dans un popup menu.
????????
D'après ce que tu as écrit dans ton 2ème post, il ne me semble pas que tu aies besoin d'un switch.
Il te suffit de faire
Si ton numéro correspond bien à celui du texte contenu dans ton popup, il n'y a aucune raison.Code:
1
2
3
4
5 val=get(hObject,'Value'); str=get(hObject,'String'); n = str2num(str{val}(2:3)); handles.num=handles.NUM(n); handles.current_data=xlsread(handles.nom_fic,handles.num,handles.posang);
D'ailleurs si ta liste déroulante est la forme
Tu peux directement utiliser le chiffre contenu dans ta variable val:Citation:
P01
P02
...
Maintenant tu as peut-être d'autres contraintes que tu n'a pas mis....Code:handles.num=handles.NUM(val);
J'ai ces lignes d'erreurs qui proviennent clairement d'un format d'objet.Citation:
??? Error while evaluating uicontrol Callback
??? Cell contents reference from a non-cell array object.
Error in ==> interface_graphique>numpt_Callback at 362
nb=str2double(str{val}(2:3));
savez-vous comment la corriger?
Bonjour,
J'ai en fait le problème suivant:
Dans la commande d'un popup menu, j'ai:
et matlab me renvoie l'erreur suivante:Code:
1
2
3
4
5
6 val=get(hObject,'Value'); str=get(hObject,'String'); a=str{val}; set(handles.strval,'String',a);nb=str2num(a(2:3)); handles.num=handles.NUM(nb); handles.current_data=xlsread(handles.nom_fic,handles.num,handles.posang);
il y a clairement un problème de format d'objet.Code:
1
2
3
4 ??? Cell contents reference from a non-cell array object. Error in ==> interface_graphique>numpt_Callback at 363 a=str{val};
Je pense que cela vient de 'Value': je ne sais pas exactement à quoi sert cette objet et son format.
Quelqu'un pourrait il m'expliquer??
salut
il faut bien que tu soit dans le callback d'un pop-up pour ce type de code, i.e. hObject est le handles d'un pop-up.
la propriété 'String' de cet objet est par exemple {'sel1', 'sel2', 'sel3'}
la propriété 'Value' vaudra 1, 2 ou 3 selon ce qui a été sélectionné.
a vaudra alors par exemple 'sel1'Code:
1
2
3 val=get(hObject,'Value'); str=get(hObject,'String'); a=str{val};
l'erreur n'est pas normale car tendrait à dire que str n'est pas un cell array donc à moins d'avoir mal défini cette propriété, ce n'est pas logique.
edit : quoique
Citation:
Envoyé par Caro-line
Peux-tu poster ce que tu obtiens en faisant:
Code:str=get(hObject,'String')
Lorsque j'affiche str=get(hObject,'String'),
J'obtiens en fait la chaine suivante:
P01
P02
P03
P04
.
.
.
.
.....
ce qui correspond en fait bien au 'String' de mon popup menu.
Voilà.
Merci d'avance pour votre aide.
Bonjour,
C'est bien cela, c'est un tableau de stringCitation:
Envoyé par Caro-line
Dans la propriété String d'une listbox on peut mettre soit un cell array (tableau de cellules) soit un tableau de caractères.
Comme tu donnes à MATLAB un vecteur numérique, il le transforme automatiquement en tableau de caractères.
donc fais
Code:n = str2double(str(val,2:3));