2015-10-05 1 views
0

Étant donné que j'ai une matrice de chaînes de noms de variables et les valeurs respectives dans une autre matrice (toutes deux provenant d'un fichier csv), comment créer des variables dans l'espace de travail nom matrice et les valeurs de la matrice de valeur?Attribuer une variable par nom dans scilab

J'ai trouvé global pour définir la portée d'une variable afin que je puisse écrire dans une fonction, mais je n'ai pas trouvé de moyen de gérer les noms de variables d'exécution.

Répondre

1

Vous devez utiliser la fonction execstr (voir: https://help.scilab.org/docs/5.5.2/en_US/execstr.html)

Par exemple, avec les noms de matrice stockés dans la variable MatrixNames et le contenu de la matrice stockée dans la MatrixContent variable, vous aurez simplement:

execstr(MatrixName(i)+'= MatrixContent'); 

Avec i le numéro de cellule pour le nom de matrice correspondant que vous souhaitez traiter. Comme suggéré par @ david-dorchies, vous devez utiliser le execstr

+0

Cela a bien fonctionné, merci! – Christoph

1

Pour vous assurer qu'ils sont globalement accessibles, utilisez des globals si vous voulez le faire dans une fonction.

Voir ci-dessous pour un exemple de mise en œuvre.

funcprot(0); 
clear; 
function assign_to_globals(names, values) 

     for i=1:length(values) 
      execstr(sprintf('clearglobal %s; global %s;', names(i), names(i))) 
      execstr(sprintf('%s = %s;', names(i), string(values(i)))) 
     end; 

endfunction 

function disp_all_globals(names) 
    for i=1:(size(names,1)*size(names,2)) 
     disp(names(i)) 
     execstr(sprintf('global %s; disp(%s)', names(i), names(i))) 
    end; 
endfunction 

values = list(23,5.6,6/10,"[1,2,3]"); 
names = ['a','my_long_var_name','c1','my_sub_mat']; 

assign_to_globals(names, values) 
disp_all_globals(names) 

clearglobal()