我的问题如下:
我有大约300个Struct文件。 它们的设置如下:
DSC_0001中包含大约250个其他结构文件: - >像这样:DSC_0001.marker_1 这一个有10个数字。 像那样: DSC_0001.marker_1.flow_angle = 90
现在我想迭代所有的Struct文件 这样的事情:
for i = 1:300
for j = 1:250
flow_angle = DSC_**i**.marker_**j**
end
end
有办法做到这一点吗? 我觉得这可能很容易,但我无法找到解决方案...... 我希望我的问题很清楚......
感谢您的帮助!
答案 0 :(得分:2)
如果可能,请不要使用eval。
这取决于您的数据的存储方式,但有一种可能性是它位于.mat文件中。在这种情况下,可以使用
加载DSC_structs = load('My_DSC_struct_file.mat');
然后您可以像这样访问值:
for i = 1:300
for j = 1:250
flow_angle(i,j) = DSC_structs.(['DSC_' sprintf('%04d',i)]).(['marker_' sprintf('%d',j)]);
end
end
编辑:您说每个结构都在不同的文件中。那有点麻烦。我可能会做这样的事情来加载它们:
DSC_structs = cell(1,300);
for i = 1:300
%Note: I'm guess at your file names here
DSC_structs{i} = load(['DSC_' sprintf('%04d',i) '.mat'];
end
然后以
的形式访问这些值DSC_structs{i}.(['DSC_' sprintf('%04d',i)]).(['marker_' sprintf('%d',j)]);
答案 1 :(得分:0)
我想这是可怕的eval
函数的用例:
for i = 1:300
for j = 1:250
eval (['flow_angle = DSC_', sprintf('%04d',i), '.marker_', num2str(j)]);
end
end
但是 NB 我的代码上面存在2个问题
eval (['flow_angle(', num2str(i), ',', num2str(j), ') = DSC_', sprintf('%04d',i), '.marker_', num2str(j)])
eval
是一种可怕的做事方式,但是你被迫,因为有人把你的数据保存得很糟糕。通过以更智能的方式重新保存您的数据,现在为您自己排序!所以像:
for i = 1:300
eval ( ['DSC(', num2str(i), ') = DSC_', sprintf('%04d',i)]);
end
%// then save DCS!
现在你可以遍历这个结构矩阵,而不是让300个结构污染你的工作区并强迫你使用eval