2015-05-06 71 views
4

让说我有一个结构的数据在工作区的如下如何从matlab中的结构字段名称生成变量?

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

我必须工作区以下变量:

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

请告诉我如何与此前进?

为什么我需要做到这一点(如果有更好的选择,以达到我的要求):

我.MAT文件140左右。现在,我需要替换所有这些.mat文件中的字符串。该字符串可以是字符串数组,单元格数组或独立变量的一部分。我跑所有这些垫文件一个循环,如下加载它们:

tempLoad=load('filename.mat'); 

然后我提取结构tempLoad,这让我的内心'filename.mat'所有变量的领域。然后我可以处理所有的变量并替换错误字符串。现在,我需要将'filename.mat'保存为确切格式

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

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

+1

不是答案,但也许你应该阅读[** this **](http://www.mathworks.com/help/matlab/import_export/load-parts-of-variables-from-mat-files。 html)来优化您的一般方法。 – thewaywewalk

+0

谢谢。我会看看这个。 – lonstud

+0

我只是把它放在那里,因为你有你想要的,但要做你原来要求你可以使用['assignin'](http:// mathworks。com/help/matlab/ref/assignin.html) – Hoki

回答

3

可以的结构tempLoad保存到'filename.mat'不使用'-struct'格式改变垫文件的结构:

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

更多信息请参见doc save

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

+1

谢谢。正是我在找什么。 – lonstud

1

救你试图使用-struct ARG:

matData = load ('filename.mat'); 

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

这应该允许您保存原始结构回文件。从你说的我认为这是真正的问题...

+0

谢谢你的帮助。 – lonstud

0

我认为其他答案可能会帮助你的问题。如果你还是真的想从田间保存新的变量,那么你可以使用

f = fieldnames(data); 

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

请注意,如果您正在使用此,there is probably a better way想想你正在试图解决的问题。

+0

'eval'是邪恶的:请参阅[为什么不使用'eval'](http://www.mathworks.com/help/matlab/matlab_prog/string-evaluation.html)。 – Shai

+1

这不是建议的,我确实在答案(最后是免责声明)中说过 – cwissy

+0

我冒昧地编辑你的答案,明确地链接到mathworks网页,为什么不使用'eval'。希望你能和你在一起。 – Shai