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 :

Appeler une structure via une variable


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 104
    Par défaut Appeler une structure via une variable
    Bonjour,

    j'ai plusieurs structures dans mon programme. Et je voudrais en appeler une selon la variable.

    La code est le suivant:

    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
    clear all
    close all
    clc
     
    toto.a = [1 2 3 4 5];
    toto.b = [6 7 8];
     
    classes = fieldnames(toto);
     
    a = fonction_a(max(size(toto.a)));
    b = fonction_b(max(size(toto.b)));
     
    j = 1;
    while isempty(find(getfield(toto,char(classes(j)))==1))==1
        j = j+1;
    end
    getfield(toto,char(classes(j)))
    Précisions:
    -"toto" est une structure composée de "toto.a" et de "toto.b"
    -"a" est une structure qui n'a rien à voir avec le "a" de "toto.a" composée de "a.c" et de "a.d"
    -"b" est une structure qui n'a rien à voir avec le "b" de "toto.b" composée de "b.c" et de "b.d"

    Ce que je veux faire:
    J'utilise la condition du "while" pour trouver qui de toto.a ou de toto.b contient un "1" dans son vecteur et j'en retire alors "a" ou "b" qui sont de type "cell". Ensuite, je voudrais appeler la structure "a" ou la structure "b" selon la réponse. Pratiquement, c'est "a.d" ou "b.d" que je voudrais appeler.

    Est-ce possible de faire cela?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    getfield(toto,char(classes(j))) à remplacer par : toto.(classes{i}).

    Le mieux je pense serait de faire quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    S.a = fonction_a(max(size(toto.a))); % max(size(.)) ou length(.)
    S.b = fonction_b(max(size(toto.b)));
    
    j = find(structfun(@(champ) any(champ==1), toto), 1) ; % remplacement de la boucle
    S.(classes{j})
    en créant une autre structure S avec les mêmes noms de champs

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 104
    Par défaut
    Merci beaucoup, cela fonctionne.

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

Discussions similaires

  1. Modifier le style d'une page dans une frame via une autre frame
    Par Menontona dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/12/2011, 18h54
  2. [AC-2003] Lier les tables d'une Base1 dans une Base3 via une Base2
    Par ted the Ors dans le forum VBA Access
    Réponses: 0
    Dernier message: 30/12/2009, 11h58
  3. Réponses: 14
    Dernier message: 10/09/2009, 19h08
  4. Réponses: 2
    Dernier message: 11/03/2009, 19h23
  5. Réponses: 2
    Dernier message: 17/04/2007, 17h14

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