2012-04-02 4 views
9

Je dois charger des données expérimentales dans scicoslab, un clone (plutôt mal conçu) de scilab qui prend en charge la modélisation graphique. La documentation sur le Web est assez pauvre, mais il est raisonnablement similaire à scilab et octave.Accès variable par nom de chaîne

Les données que j'ai besoin de traiter sont contenues dans un certain nombre de fichiers texte: Data_005, Data_010, ..., Data_100. Chacun d'eux peut être chargé en utilisant l'indicateur -ascii pour la commande loadmatfile.

Le problème vient du fait que loadmatfile("foo", "-ascii") charge le fichier foo.mat dans une variable nommée foo. Pour faire défiler les fichiers de données, je besoin de faire quelque chose comme:

for i = [5:5:100] 
    name = sprintf("Data_%02d", i); 
    loadmatfile(name, "-ascii"); 
    x = read_var_from_name(name); 
    do_something(x); 
end 

où ce que je cherche est un read_var_from_name qui me builtin permettra d'accéder à la table des symboles interne par chaîne.

Savez-vous s'il existe une fonction similaire?

Notes:

  1. Il n'y a aucun moyen de passer outre ce comportement si votre fichier est en format ascii;
  2. Dans cette phase je pourrais aussi utiliser octave (aucune modélisation graphique n'est impliquée), bien qu'il se comporte de la même manière.

Répondre

9
>> foo = 3.14; name = 'foo'; eval(name) 

foo = 

    3.1400 

Les travaux ci-dessus dans Matlab et la documentation de Scilab dit qu'il a également une fonction eval. Je ne sais pas si je vous ai bien compris, cependant.

+0

Confirmed travailler sous octave et ScicosLab – Dacav

9

@ arne.b a une bonne réponse.

Dans votre cas, vous pouvez aussi le faire en Matlab:

a=load('filename.mat') 
x=a.('variable_name') 
+1

Je voulais juste dire (comme quelqu'un d'un milieu de programmation où 'eval()' est considéré comme le mal) merci de le signaler; Je n'avais aucune idée de cette syntaxe existait! – miken32

+0

@ miken32 'eval' est en effet le mal. – Oli

Questions connexes