executing an m-file using a string for calling
显示 更早的评论
Hello, I am trying to find a way to execute an m-file from a string.
For example I get from a DB return the name myfunc(1,2) as a char and I want to execute the function myfunc.m with the (1,2) as variables. Does anyone have any solution.
Thanx in advance.
Georgios Mavropoulos
采纳的回答
更多回答(4 个)
Jan
2011-3-17
If you call RUN with a string, which contains the path, the file extension .m is removed. Without the path, .m is kept.
mfile = dir('layer*.m');
[trash, name] = fileparts(mfile(1).name);
run(name);
Or:
mfile = dir('layer*.m');
run(fullfile(cd, mfile(1).name));
Note: "mfile(1)" considers, that DIR can find multiple matching files.
Dimitris
2011-3-15
I'm trying to do something similar. My output is an .m file. Like this:
mfile = dir('layer*.m')
So, afterwards I want to run the file named layer<something>.m But if I do as you say:
eval(mfile.name)
I get this error:
??? Undefined variable "layer2" or class "layer2.m".
Why is this happening? The file I'm trying to run, layer2.m, is in the current directory.
3 个评论
Walter Roberson
2011-3-15
You have to remove the .m suffix before you can eval()
As you do not appear to be sending input or expecting output, it is plausible that you are using scripts instead of functions. If so, then consider using run(), as that will remove the .m for you.
Jan
2011-3-17
RUN removes the file extension only, if the name contains the path:
working: run('C:\MFiles\layer2.m')
failing: run('layer2.m')
I think, this is a bug in RUN: If "script" does not contain a path, "exist(script, 'file')" checks the existence before "evalin('caller', [script, ';'])". But if "script" is an existing file, the file extension let EVALIN fail. "evalin('caller', [s, ';'])" would work. (checked in 2009a)
Jan
2011-3-17
Bug report is submitted.
Dimitris
2011-3-15
I tried to use:
run(mfile.name)
but I got the same error:
??? Undefined variable "layer2" or class "layer2.m".
Error in ==> run at 74
evalin('caller',[script ';']);
:S I also tried
run(eval(mfile.name))
with the same results... Thank you for your interest!
2 个评论
Hayatullahi Adeyemo
2017-11-12
You can try using
eval(mfile.name)
Jan
2017-11-12
@Hayatullahi Adeyemo: The variable "mfile.name" contains the string 'layer2'. The error message produced by run('layer2') means, that there is no function with this name in Matlab's path. Then eval('layer2') will not work also.
类别
在 帮助中心 和 File Exchange 中查找有关 Debugging and Analysis 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!