2010-07-27 8 views
3

Je me demande si c'est possible. Mon code ressemble à ceci:MATLAB: Comment utiliser une valeur de variable dans un autre nom de variable?

indexStop = find(firstinSeq(x,4) ~= ... 
       littledataPassed(y:length(littledataPassed),4), 1, 'first'); 
for z= 0:(n-1) 
    indexProcess = find((littledataPassed(y:y+indexStop-1,6) == 1 & ... 
     littledataPassed(y:y+indexStop-1,2) == firstinSeq(x,2) & ... 
     littledataPassed(y:y+indexStop-1,5) == z), 1, 'first'); 
    if isempty(indexProcess) 
     msgLength[n](countmsgLength[n],:)= [firstinSeq(x,:) [0 0 0 0 0 0]]; 
    else 
     msgLength[n](countmsgLength[n],:)= [firstinSeq(x,:) ... 
     littledataPassed(y+indexProcess-1,:)]; 
    end 
    countmsgLength[n]= countmsgLength[n] + 1; 
end 

J'espère avoir partout où se lit [n] être commuté à la valeur réelle de n, de sorte que je puisse l'utiliser pour ajouter des données à neuf variables différentes dans le format msgLength#. J'ai essayé de chercher des tutoriels et ce qui n'est pas, mais je n'ai rien vu sur le sujet.

+1

Ceci est en fait un double de [cette autre question] (http://stackoverflow.com/questions/2809635/how-to-concatenate-a -number-to-a-variable-name-in-matlab), mais j'ai ajouté quelques conseils ci-dessous qui sont spécifiques au code que vous avez posté ci-dessus. – gnovice

Répondre

8

Il est presque toujours préférable d'utiliser des tableaux ou cell arrays pour stocker des données que pour créer un groupe de variables nommées a1, a2, a3, etc. Par exemple, vous pouvez initialiser msgLength comme une matrice de cellules avec n éléments:

msgLength = cell(1,n); 

Et vous pouvez accéder à des cellules de msgLength en utilisant des accolades:

msgLength{n} = ... %# Assign something to cell n 

votre variable countmsgLength peut simplement être un tableau numérique normal, car il semble ne stocker que les valeurs n. Vous devez simplement remplacer les crochets par des parenthèses (c'est-à-dire [n] à (n)).


Cependant, si vous vraiment voulez créer n des variables distinctes, vous finirez probablement en utilisant la fonction EVAL. This question et this question montrent quelques exemples de création de noms de variables en utilisant la valeur d'une autre variable.

0

Si vous devez absolument utiliser plusieurs variables, la structure dynamic fieldnames utilisant la notation() serait pratique. Si vous entrez les informations suivantes:

>> n = 1; 
>> data.(sprintf('msgLength%u', n)) = [1 2 3 4]; 
>> n = 2; 
>> data.(sprintf('msgLength%u', n)) = [5 6 7 8]; 

Vous obtiendrez une structure avec deux champs:

>> data 
data = 
    msgLength1: [1 2 3 4] 
    msgLength2: [5 6 7 8] 

Malgré cela, je seconde suggestion de gnovice d'utiliser un tableau pour stocker des données au lieu de plusieurs variables. Vous pouvez simplement ajouter une autre dimension à la ligne 7 msgLength donc devient:

msgLength(n,countmsgLength(n),:)= [firstinSeq(x,:) [0 0 0 0 0 0]]; 
Questions connexes