如何从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
。希望你能接受。非常感谢,我的免责声明有点半心半意