1

matlab我有一个应该接受文件名的函数。该文件中有一个结构,稍后应在函数中执行该文件,以便将结构加载到工作空间。

例如:

我的功能是hello(a),其中'a'是一个文件名,这个文件有一个结构。

在命令窗口中执行文件时,这个结构将被加载到工作区中。同样,我希望在调用函数时将结构加载到工作区中。

我试过eval(a)了,但这没有将文件中的结构加载到工作区。

从文件名中我将如何获得结构名称,即使我知道文件中有一个结构,但这会动态变化。

那么我应该如何在函数中返回结构呢?

4

2 回答 2

1

我不确定您是否希望将文件中的结构(或多个结构)自动复制到工作区,或者您是否想自己分配数据。

以下解决方案a使用该函数自动将所有变量从文件复制到“基础”工作区assignin()。该解决方案还假定您为它提供了一个 .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
于 2013-07-18T10:41:43.720 回答
0

尝试eval

function mystruct = readstruct(filename)
% ... read in text from file here ...
eval(text)

例如,假设您的文件包含 text 'mystruct.myval = 1',则在将文件内容读入 string 后texteval(text)返回

mystruct = 

    myval: 1

要将结构加载到工作区中,该函数应返回结构。

如果文件包含任意数据(可能但不一定是 ascii 格式),那么您可以在读取文件后简单地将其分配给结构:

function mystruct = readstruct(filename)
% ... read in text from file here ...
% ... perform conversion of data type ...
mystruct.value = values 
于 2013-07-18T10:13:55.670 回答