如何从 matlab 中的结构字段名称生成变量?

How to generate variables from stucture field names in matlab?

假设我在工作区中有一个结构数据如下

data.a={'1','2'};
data.b=[1,2,3];
data.c='hello';

我需要在工作区中包含以下变量:

a={'1','2'};
b=[1,2,3];
c='hello';

请告诉我如何推进这项工作?

为什么我需要这样做(以防有更好的选择来实现我的要求):

我有大约 140 个 .mat 文件。现在,我需要替换所有这些 .mat 文件中的字符串。该字符串可以是字符串数组、元胞数组或独立变量的一部分。我 运行 为所有这些 mat 文件循环并按如下方式加载它们:

tempLoad=load('filename.mat');

然后我提取结构 tempLoad 的字段,它为我提供了 'filename.mat' 中的所有变量。然后我可以处理所有变量并替换错误字符串。现在,我需要以 精确格式 .

保存 'filename.mat'

我不能使用 save('filename.mat','tempLoad') 或简单地 save('filename.mat') 因为变量的原始存储不是由它们维护的。

所以我需要将tempLoad的所有字段都转换成变量,然后清除tempLoad,然后调用save函数。

可以将结构tempLoad保存到'filename.mat',而无需使用'-struct'格式更改mat文件的结构:

save( 'filename.mat', '-struct', 'tempLoad' );

有关详细信息,请参阅 doc save

您也可以考虑使用 matfile 对象来访问保存的 matfile 并直接更新特定字符串,而无需每次 loading/saving 整个文件。

为了保存,您是否尝试过使用 -struct 参数:

matData = load ( 'filename.mat' );

save ( 'filename2.mat', '-struct', 'matData' )

这应该允许您将原始结构保存回文件。根据你所说的,我假设这是真正的问题...

我认为其他答案可能对您的问题有所帮助。如果您仍然真的想从字段中保存新变量,那么您可以使用

f = fieldnames(data);

for ii = 1:numel(f)
    eval([f{ii} ' = data.' f{ii}]);
end

请注意,如果您正在使用它,there is probably a better way 考虑您要解决的问题。