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

如何从matlab中的结构字段名生成变量?,matlab,matrix,struct,Matlab,Matrix,Struct,假设我在工作区中有一个结构数据,如下所示 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文件运行循环,并

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

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');
然后,我提取结构
templaod
的字段,它提供了
'filename.mat'
中的所有变量。然后我可以处理所有变量并替换错误字符串。现在,我需要以精确格式保存
'filename.mat'

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


因此我需要将
templaod
的所有字段转换为变量,然后清除
tempLoad
,然后调用
save
函数。

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

save( 'filename.mat', '-struct', 'tempLoad' );
有关更多信息,请参阅


您也可以考虑使用对象来访问保存的Matfile并在没有加载/保存整个文件的情况下直接更新特定的字符串。

matData = load ( 'filename.mat' );

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

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

我认为其他答案可能有助于解决你的问题。如果您仍然希望保存字段中的新变量,那么可以使用

f = fieldnames(data);

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

请注意,如果您正在使用此方法,请思考您试图解决的问题。

答案不是,但您可能应该阅读以优化您的一般方法。谢谢。我来看看。我只是把它放在那个里,因为你们有你们想要的,但要做你们最初要求的,你们可以用一个好问题+1包括您的要求背后的原因。
eval
是邪恶的:请参阅。不建议这样做,我在回答(以及最后的免责声明)中确实说过,我冒昧地编辑了您的回答,明确链接到mathworks网页,说明为什么不使用
eval
。希望你能接受。非常感谢,我的免责声明有点半心半意