在matlab
我有一个应该采用文件名的功能。
这个文件中有一个结构,以后这个文件应该在函数中执行,这样结构就会被加载到工作区。
例如:
我的功能是hello(a)
,其中'a'是文件名,此文件有结构。
在命令窗口中执行文件时,此结构将加载到工作区中。 我希望在调用函数时将结构加载到工作区中。
我尝试了eval(a)
,但这并没有将文件中的结构加载到工作区。
从文件名中我将如何获取结构名称,即使我知道文件中有结构,但这将会动态变化。
那么我应该如何在函数中返回结构?
答案 0 :(得分:1)
我不确定您是否希望将文件中的结构(或结构)自动复制到工作区,或者您是否想自己分配数据。
以下解决方案使用a
函数自动将文件assignin()
中的所有变量复制到“base”-workspace。该解决方案还假定您为.mat文件提供了一个文件。
function hello(a)
all_structs = load('-mat', a);
var_names = fieldnames(all_structs);
for k = 1:length(var_names)
assignin('base', var_names{k}, all_structs.(var_names{k}));
end
end
答案 1 :(得分:0)
尝试eval
:
function mystruct = readstruct(filename)
% ... read in text from file here ...
eval(text)
例如,假设您的文件包含文本'mystruct.myval = 1'
,然后在将文件内容读入字符串text
后,eval(text)
返回
mystruct =
myval: 1
要将结构加载到工作区,该函数应返回结构。
如果文件包含任意数据(可能但不一定是ascii格式),那么您可以在读取文件后将其分配给结构:
function mystruct = readstruct(filename)
% ... read in text from file here ...
% ... perform conversion of data type ...
mystruct.value = values