eval for string to variable
55 ビュー (過去 30 日間)
古いコメントを表示
I have a GUI with a string as variable and a returned value for it.
var="simulation type"
returned GUI value:
DataEdit.Value = 1x1 cell array {'RUN 1'}
eval([var '=' char(DataEdit.Value) ';']) gives Error using eval, Argument must be a text scalar.
Any suggestions?
2 件のコメント
Stephen23
2023 年 10 月 17 日
"Any suggestions?"
The fact that EVAL lets you obfuscate such buggy code should be a big hint that this should be avoided.
Walter Roberson
2023 年 10 月 17 日
And when the XML file has in it
app = ''
then should your code delete your GUI, writing over the app variable that is holding the framework of your entire GUI ?
採用された回答
Voss
2023 年 10 月 17 日
Since var is a string (as opposed to character vector), when you concatenate it with character vectors, those character vectors are converted to strings as well, and the result is a string array:
var="simulation type";
DataEdit.Value = {'RUN 1'};
[var '=' char(DataEdit.Value) ';']
However, if you convert var into a character vector, then the concatenation works:
[char(var) '=' char(DataEdit.Value) ';']
You could also use the + operator for string concatenation, to concatenate everything as a string:
var + '=' + char(DataEdit.Value) + ';'
But in either case, you cannot eval the result because simulation type is not a valid variable name:
try
eval([char(var) '=' char(DataEdit.Value) ';'])
catch ME
disp(ME.message)
end
try
eval(var + '=' + char(DataEdit.Value) + ';')
catch ME
disp(ME.message)
end
So what is it you want to do with this?
4 件のコメント
Walter Roberson
2023 年 10 月 18 日
What XML writing routine are you using that cares about the name of the variable holding the data to be written??
Have you considered using dynamic field names of a struct, and using writestruct to write the output XML file ? Perhaps having used readstruct to read the original in?
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Structures についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!