Accessing variable by string name

23,353

Solution 1

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

foo =

    3.1400

The above works in MATLAB, and Scilab's documentation says it also has an eval function. Not sure if I understood you correctly, though.

Solution 2

@arne.b has a good answer.

In your case you can also do that in matlab:

a=load('filename.mat')
x=a.('variable_name')
Share:
23,353
Dacav
Author by

Dacav

Computer enthusiast and programmer, with a true passion for C and pesky details of various Unix-like systems.

Updated on July 23, 2020

Comments

  • Dacav
    Dacav almost 4 years

    I need to load experimental data into scicoslab, a (pretty badly designed) clone fork of scilab which happens to support graphical modeling. The documentation on the web is pretty poor, but it's reasonably similar to scilab and octave.

    The data I need to process is contained into a certain number of text files: Data_005, Data_010, …, Data_100. Each of them can be loaded using the -ascii flag for the loadmatfile command.

    The problem comes from the fact that loadmatfile("foo", "-ascii") loads the file foo.mat into a variable named foo. In order to to cycle on the data files, I would need to do something like:

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

    where what I search for is a builtin read_var_from_name which would allow me to access the internal symbol table by string.

    Do you know if there exist a similar function?

    Notes:

    1. There's no way of overriding this behavior if your file is in ascii format;
    2. In this phase I could also use octave (no graphical modelling is involved), although it behaves in the same way.
  • miken32
    miken32 almost 9 years
    Just wanted to say (as someone from a programming background where eval() is considered evil) thanks for pointing this out; I had no idea this syntax existed!
  • Oli
    Oli almost 9 years
    @miken32 eval is indeed evil.