我有一个带有调用uigetfile的按钮的Matlab gui。用户选择他们想要运行的文件,然后我的gui应该执行该.m文件,将结果返回给gui进行进一步处理。
Uigetfile工作得很好,我可以捕获文件名和文件路径:
[filename, pathname] = uigetfile('*.m', 'Pick a .m file');
当我尝试执行文件名时:
total = [pathname filename];
% copy into current directory since files user selects could be in other directories
copyfile(total);
% attempt to execute .m function the user selected
[a, b] = filename();
我收到此错误:
Indexing cannot yield multiple results.
我的研究表明这是因为我有一个名为" filename"的变量。所以Matlab认为我试图使用变量,而不是调用函数。这对我来说很有意义,但后来我不知道怎么解决这个问题!
如果没有变量,我如何调用uigetfile的结果?或者,我怎样才能运行用户在gui中选择的.m文件?
谢谢!
答案 0 :(得分:1)
如果您与m.file位于同一文件夹中,则可以将整个uigetfile调用包含在运行函数中以执行它:
run(uigetfile('*.m', 'Pick a .m file'))
这样可以避免与先前定义的 filename 变量的命名冲突,并在不存储其输出的情况下调用uigetfile的结果。但是,如果你想从另一个文件夹运行脚本,我建议用不同的名称存储uigetfile的结果:
[filename, pathname] = uigetfile('*.m', 'Pick a .m file');
run([filepath filename])
这使您可以运行mfile而无需将其复制到当前文件夹,并且仍然可以避免与先前定义的变量发生任何冲突。
答案 1 :(得分:1)
我知道这已经得到了回答并被接受但你可能想看看:
output = feval ( str2func ( filename(1:end-2) ) )
(1:end-2)是删除.m
这样,您可以将函数的输出存储在变量 output 中。如果你的m文件具有可变数量的输出,你可以将它们存储在结构或单元格数组中。
仅仅因为函数没有输入 - 我不会认为相同作为脚本 - 你的“脚本”可能会覆盖你的调用函数中的很多变量而你不会知道。 .. - >因此调试是一场噩梦...