How to convert string to variable name ?

1.370 Ansichten (letzte 30 Tage)
Pradya Panyainkaew
Pradya Panyainkaew am 13 Jan. 2018
Kommentiert: Walter Roberson am 3 Nov. 2022
I try to do like this
if true
where Month is a input variable represent char '01,02,...,12'
My problem is I cannot refer variable such as 'Indiv_Reg_01' to get a data from this variable. For example, I cannot get data from Indiv_Reg_01{1,1} by using this code
if true
How Can I fix this problem ?
thanks in advance.
  1 Kommentar
Stephen23 am 13 Jan. 2018
"My problem is I cannot refer variable such as 'Indiv_Reg_01' to get a data from this variable"
The problem is that you are hiding pesudo-indices in variable names. Turn them into real indices and your "problem" instantly goes away. Solving problems through better code design is always preferred to writing slow, buggy, hack code accessing variable names.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Jan am 13 Jan. 2018
Bearbeitet: Jan am 13 Jan. 2018
This question is an evergreen. The solution is easy: Don't do this. It is a shot in your knee.
Do not hide indices in the names of variables, but use indices instead: Let Indiv_Reg be a cell array and use the numerical value as index. This is much better than the indirection over the conversion to a string and hiding it in the names of dynamically created variables.
  5 Kommentare
Walter Roberson
Walter Roberson am 3 Nov. 2022
When we visit the site like this and post our questions, we are looking for a direct 'answer' to our question.
This site gets quite a lot of questions from students. A fair portion of the students are "looking for" complete working code for their homework or honours project, that they can submit as their own work, without having to learn how to solve the problems themselves. Does it follow that we should provide that to them?

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (3)

Luna am 4 Jan. 2019
Bearbeitet: Luna am 4 Jan. 2019
Hi all,
I agree with Jan & Stephen what they said about eval function. Don't use it. Instead use struct and arrays with dynamic naming.
For this example I have created a solution you can check:
Month = '01,02,03,04,05,06,07,08,09,10,11,12';
monthsArray = strsplit(Month,',');
for i = 1:numel(monthsArray)
Varnames{i} = matlab.lang.makeValidName(strcat('Indiv_Reg_',monthsArray{i}));
myStruct.(Varnames{i}) = randi(20,1,1);
myStruct.(Varnames{1,1}) % should give you a value of a random number
myStruct.Indiv_Reg_01 % same result above
ps: if you are forced to name your variables use this. Otherwise use directly indices of your Nx12 array.
  4 Kommentare
Luna am 1 Jun. 2020
Believe me you will put much more effort to the solution you are asking for in your way rather than "just redoing all scripts you got".
You will spend time just for once redoing your code with indexing and implementing arrays. After that you will be free. Think that when you want to change a single variable name, that will force you to "redo all your scripts" again.
I only use eval if I'm running Simulink models with from Workspace blocks.
Don't use it if you really don't know what eval is used for. Here is some informations about justifiable usages of eval. These advices are from Matlab experts, at least they know some programming better than most.

Melden Sie sich an, um zu kommentieren.

Gabor am 18 Feb. 2021
Bearbeitet: Gabor am 18 Feb. 2021
Your answer does not work if you only have hammer and a screw available at hand (curvfitting tool does not accept structs as variable for eg.). In that case its perfect to use the hammer to pop that screw in fast :D
I found this:
assignin('base',var_name, value)
  4 Kommentare
Govind Narayan Sahu
Govind Narayan Sahu am 17 Jun. 2022
Bearbeitet: Govind Narayan Sahu am 17 Jun. 2022
This works perfectly fine for me. Thanks a lot.
data = rand(1,8);
vars = {'a', 'b', 'd', 'e', 'f', 'g', 'h', 'i'};
index_vars = 1:8;
for k = 1:length(vars)
assignin('base',vars{k}, data(1, index_vars(k)))

Melden Sie sich an, um zu kommentieren.

Anshuman Agrawal
Anshuman Agrawal am 19 Jun. 2020
Bearbeitet: Anshuman Agrawal am 19 Jun. 2020
Hopefully, what you wanted to do was covered here.


Mehr zu Programmatic Model Editing finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by