2010-05-13 6 views
2

J'ai une structure en matlab qui a une valeur de <1x1 struct>., son nom est figurelist. À l'intérieur de cette structure, il y a un champ appelé images. images à l'intérieur, j'ai 25 images qui ont le nom img1, img2, img3, ..... , img25.Pour boucle pour extraire des informations d'une structure ne fonctionne pas?

Maintenant, je fait une boucle pour extraire ces images, je essentiellement fait:

For K=1:25 
    image(figurelist.images.imgK) 
    PAUSE(0.25) 
End 

Ce malheureusement ne fonctionne pas. Je reçois un dicton d'erreur:

??? Reference to non-existent field 'imgK'.

Est-il possible d'extraire ces informations en utilisant une boucle d'une structure? Ou est-ce que je fais quelque chose de mal? Merci.

+1

solution de gnovice semble fonctionner, mais je suis curieux de savoir pourquoi vous nommer vos variables img au lieu [1,2,3] de les stocker dans un tableau. Ce dernier serait une solution beaucoup plus évolutive et élégante. – Kena

+0

Eh bien, on m'a donné cette structure, et je suis supposé 'traiter' comme ça et trouver un moyen d'extraire les données. – NLed

Répondre

4

Vous auriez à faire quelque chose comme ceci:

for K=1:25 
    image(figurelist.images.(['img' int2str(K)])) 
    pause(0.25) 
end 

Depuis le nom du champ est fonction de votre variable de boucle, vous devez construire une chaîne pour le nom du champ. La fonction INT2STR convertit la valeur de votre variable de boucle K en une chaîne de caractères, qui est ensuite ajoutée à 'img' pour créer la chaîne pour le nom du champ. Ensuite, le dynamic field reference syntax (.()) est utilisé pour accéder à la valeur du champ en utilisant cette chaîne.

Un couple de bons exemples d'utilisation de noms de champs dynamiques peut être trouvé sur Loren's blog et Doug's blog.

+0

Merci qui a résolu le problème (je dois attendre 10 minutes avant d'accepter) ... Pouvez-vous s'il vous plaît expliquer ce que vous avez fait? Vous mettez un entier à la conversion de chaîne de K .. pourquoi? Donc, il peut le lire comme une valeur plutôt que d'un caractère ?? ou quoi – NLed

+0

Merci d'avoir expliqué :) – NLed

+0

Le blog de Doug était si utile !! Merci !! – NLed