MATLAB: Assess element in struct which filed name contains ‘.’

cell arrayselementsstruct

hello folks,
I am trying to get the elements from the multiple structs data. for example
a = data.x1.data(1)
when I try to loop this in for loop, I need to increase the number following by x for example
data.x1.data(1) data.x2.data(1)
so I simply used this
for i = 1:b;
data0(i,4) =(data.x(i).data(1))
end
but it keeps saying that 'Reference to non-existent field 'x'.'
How can I resolve this error? it doesn't have any problem when I use
data.x1.data(1)
hope anyone of you can guide me 🙁
thanks, Ali

Best Answer

You will need to use a dynamic fieldname:
for k = 1:b;
fld = sprint('x%d',k);
data.(fld).data
end
Your code would be simpler and more efficient if you just used a non-scalar structure, then you could just use indexing:
>> S(1).data = 1:3;
>> S(2).data = 4:6;
>> S(3).data = 7:9;
>> for k = 1:3, S(k).data(1), end
ans = 1
ans = 4
ans = 7
Personally I would also recommend avoiding using nested structures, as then you can use the very convenient comma-separated list syntax for handling multiple elements of the structure.