MATLAB: How to access a structure array using a loop

structure arrays

Hello, I am trying to access the data in a structure array .Since there are multiple groups of data I have allotted a single field in the structure for each group. The problem that I am encountering is that I am not able to access the structure by keeping the field name to be variable.MATLAB thinks of that field variable as the field name instead.How can I work around this issue? The code below shows part of the task that I am trying to do.The actual task is a bit different.
p=struct('p1',{p1});
p=struct('p2',{p2});
p=struct('p3',{p3});
p=struct('p4',{p4});
p=struct('p5',{p5});
p=struct('p6',{p6});
p=struct('p7',{p7});
p=struct('p8',{p8});
p=struct('p9',{p9});
p=struct('p10',{p10});
for i=['p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8' 'p9' 'p10']
o=p.i
end

Best Answer

First, note that with your example, at the end p is a structure with just one field 'p10'. To create the structure you want:
p = struct('p1', {p1}, 'p2', {p2}, 'p3', {p3}, ...)
Also note that you don't need to put the field contents into a cell array, unless this content is itself a cell array. so:
p = struct('p1', p1, 'p2', p2, ...)
may work just as well.
Secondly, your for loop is not going to work, ['p1' 'p2' 'p3' ...] is exactly the same as 'p1p2p3....', and i will take in turn the values 'p', then '1', then 'p' again, then '2', etc. You need to use a cell array
Finally, to use dynamic field names, you enclose the variable holding the field name in round brackets ().
So:
p = struct('p1',{p1}, 'p2',{p2}, 'p3',{p3}, 'p4',{p4}), 'p5',{p5}, 'p6',{p6}, 'p7',{p7},
'p8',{p8}, 'p9',{p9}, 'p10',{p10});
for fn = {'p1', 'p2', 'p3', 'p4', 'p5', 'p6', 'p7', 'p8', 'p9', 'p10'}
%or better: for fn = fieldnames(p)'
o = p.(fn{1});
end
Related Question