How do I turn string "C = A*B" to "data.C = data.A.*data.B " while the equation and variables may change?
Ältere Kommentare anzeigen
I'm building a GUI that reads simple formulas from an Excel file, then evaluate them as Matlab code. For example, the user may write "C=A*B" in an Excel cell, then Matlab will import the table and calculate a new variable C with the function eval. The problem is, the variables A and B are actually variables in a table, so the correct code should have been "data.C = data.A.*data.B ". The goal is to let the user create new variables without building a complicated calculator GUI.
The difficult part is, the names (A, B, C) are dynamic and there can be all sort of equations like "A=B+C/D" or "A=B^2-C". The name of the table itself is however fixed. How can I achieve that?
Akzeptierte Antwort
Weitere Antworten (1)
dpb
am 27 Jun. 2022
0 Stimmen
If the table name is fixed, then it's easy -- use dynamic field names as explained in accessing data in tables -- and specifically using variables for table variable names at <<Access-data-in-a-table>
4 Kommentare
Walter Roberson
am 27 Jun. 2022
I predict that the user is wanting to do the text substitution and then eval()
Shao-Yu Wang
am 27 Jun. 2022
Bearbeitet: Shao-Yu Wang
am 27 Jun. 2022
There are a few functions in MATLAB that may be able to help you like symvar, vectorize, and str2func.
s = 'A=B+C/D';
sides = split(s, '=');
lhs = sides{1}
rhs = sides{2}
listOfVariablesOnRight = symvar(rhs);
str = "@(" + join(listOfVariablesOnRight, ', ') + ") " + vectorize(rhs)
fh = str2func(str)
Now call the function handle with the appropriate inputs and store the output in a field of a struct array.
result.(lhs) = fh(1, 2, 3)
check = 1 + (2/3)
Shao-Yu Wang
am 28 Jun. 2022
Kategorien
Mehr zu Characters and Strings finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!