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 :

Comment faire pour récupérer les valeur de champs d'une structure?


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Comment faire pour récupérer les valeur de champs d'une structure?
    Bonjour,

    je souhaite écrire une fonction imbriquée qui récupère les valeurs de plusieurs champs d'une structure qui est située dans la fonction principale. Comment puis-je procéder?

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    Tu peux passer ta structure (ou les champs qui t'intéressent) en argument de ta fonction, non?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  3. #3
    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,

    Comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function ma_fcn_principale
     
    donnee = struct('champ1',1, 'champ2', 3, 'champ3', 6);
     
        function ma_fcn_imbriquee
     
            donnee.champ2+donnee.champ3
     
        end
     
    end
    Bonne apm,
    Duf
    Simulink & Embedded Coder

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

  4. #4
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    annuler est ma fonction imbriquée,
    donnes est ma structure. C'est en fait un tableau de structure. Chaque sous-structure possède 4 champs (qui ont le même nom mais des valeurs propres à chaque sous-structure). Je souhaite en utiliser/modifier deux des quatre.

    J'ai essayé de passer la structure en argument, mais sans résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     function annuler(struct donnes)
    (avec ce code là, matlab me retourne unexpected matlab expression)

    j'ai aussi essayé sans argument, j'ai alors Too many input argument

    enfin j'ai également essayé la syntaxe suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     function annuler(donnes)
    où j'obtiens le même message d'erreur.


    J'ai également essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function annuler(obj,event)
                valid = [donnes.val];
                p = donnes.pos;
    (où val et pos sont de des quatre champs des sous-structures)

    Dans ce cas, matlab ne reconnaît pas la structure donnes déclarées dans la fonction mère.
    J'avoue que là, je suis assez perdue...

  5. #5
    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
    Ce qu'il aurait fallu préciser c'est que ta fonction annuler a été créée pour un GUI, surement en tant que callback, non ?
    Dans ce cas je te conseille la lecture du tutoriel : Développement efficace des interfaces graphiques (GUI)

    Tu peux toujours utiliser les nested functions (fonctions imbriquées) comme l'a montré Duf. Il suffit de rajouter un END à la fin de chaque sous-fonction et de la fonction principale.
    Dans ce cas les sous-fonctions connaitront les variables créées dans la fonction principale (mais pas celles des autres sous-fonctions), et la fonction principale prendra en compte les changements intervenus sur ces variables dans les sous-fonctions.
    Règles du Forum

    Adepte de la maïeutique

  6. #6
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Oui en effet, je suis en train de créer un GUI

    Mon problème est bien du à l'utilisation des fonctions imbriquées.

    Tout d'abord, je me suis aperçue que j'avais déclaré ma structure dans un fonction imbriquée, ce qui faisait que ma deuxième fonction imbriquée ne la reconnaissait pas. J'ai changé ceci et l'ai déclaré dans ma fonction principale.

    Maintenant, il s'avère que j'ajoute des sous-structures avec ma première sous-fonction. Quel est le moyen le plus efficace pour récupérer ces nouvelles sous-structures dans ma deuxième sous-fonction? (j'avoue que je ne manipule pas encore très bien les structures)

    merci pour votre aide

  7. #7
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    C'est bon j'ai trouvé!

    Il suffisait d'utiliser getfield et setfield!

  8. #8
    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
    Citation Envoyé par delph1208 Voir le message
    Il suffisait d'utiliser getfield et setfield!
    En général ce n'est pas nécessaire, il faut mieux utiliser les champs dynamiques de structures si c'est parce que le nom de ton champ est dans une variable.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    chp='champ';
    a.(chp)=2;%setfield(a,chp,2);
    c=a.(chp);%c=getfield(a,chp);
    Règles du Forum

    Adepte de la maïeutique

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

Discussions similaires

  1. [WD17] récupérer les valeurs des champs d'une autre fenetre
    Par Débutant_WD dans le forum WinDev
    Réponses: 2
    Dernier message: 17/09/2013, 11h45
  2. Réponses: 1
    Dernier message: 11/09/2013, 10h44
  3. récupérer les valeurs des champs d'une autre page
    Par owenho dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/02/2013, 00h47
  4. Réponses: 4
    Dernier message: 16/06/2011, 12h07
  5. Comment faire pour entrer plus de 255 champs dans une table.
    Par adelsunwind dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 16/03/2009, 19h35

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