在 Matlab gui 中,如何执行 uigetfile 返回的 .m 文件?
In a Matlab gui how do you execute a .m file returned as a result of uigetfile?
我有一个带有调用 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 文件?
谢谢!
如果您与 m.file 在同一个文件夹中,您可以将整个 uigetfile 调用包含在 运行 函数中以执行它:
run(uigetfile('*.m', 'Pick a .m file'))
这样您就可以避免与您之前定义的 filename 变量的命名冲突,并且在不存储其输出的情况下调用 uigetfile 的结果。但是,如果您想 运行 来自不同文件夹的脚本,我建议使用不同的名称存储 uigetfile 的结果:
[filename, pathname] = uigetfile('*.m', 'Pick a .m file');
run([filepath filename])
这使您能够 运行 m文件而无需将其复制到当前文件夹,并且仍然避免与您之前定义的变量发生任何冲突。
我知道这已经被回答并被接受,但你可能想看看:
output = feval ( str2func ( filename(1:end-2) ) )
(1:end-2)是去掉.m
这样您就可以将函数的输出存储在变量 output 中。如果您的 m 文件具有可变数量的输出,您可以将它们存储在结构或元胞数组中。
仅仅因为函数没有输入 - 我不认为 与脚本相同 - 你的 "script" 可能会覆盖调用函数中的很多变量你不会知道... -> 因此调试将是一场噩梦...
我有一个带有调用 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 文件?
谢谢!
如果您与 m.file 在同一个文件夹中,您可以将整个 uigetfile 调用包含在 运行 函数中以执行它:
run(uigetfile('*.m', 'Pick a .m file'))
这样您就可以避免与您之前定义的 filename 变量的命名冲突,并且在不存储其输出的情况下调用 uigetfile 的结果。但是,如果您想 运行 来自不同文件夹的脚本,我建议使用不同的名称存储 uigetfile 的结果:
[filename, pathname] = uigetfile('*.m', 'Pick a .m file');
run([filepath filename])
这使您能够 运行 m文件而无需将其复制到当前文件夹,并且仍然避免与您之前定义的变量发生任何冲突。
我知道这已经被回答并被接受,但你可能想看看:
output = feval ( str2func ( filename(1:end-2) ) )
(1:end-2)是去掉.m
这样您就可以将函数的输出存储在变量 output 中。如果您的 m 文件具有可变数量的输出,您可以将它们存储在结构或元胞数组中。
仅仅因为函数没有输入 - 我不认为 与脚本相同 - 你的 "script" 可能会覆盖调用函数中的很多变量你不会知道... -> 因此调试将是一场噩梦...