Assess element in struct which filed name contains '.'

1 view (last 30 days)
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
  1 Comment
Stephen23
Stephen23 on 19 Oct 2018
This syntax:
data.x(i)
trieds to access the i-th element of the field x. Your structure data does not contain the field x, so this will not work (unless you improve your data design to use a non-scalar structure).

Sign in to comment.

Accepted Answer

Stephen23
Stephen23 on 19 Oct 2018
Edited: Stephen23 on 19 Oct 2018
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.
  1 Comment
Areum Lee
Areum Lee on 19 Oct 2018
thank you very much for the quick answer. that's what I exactly wanted.

Sign in to comment.

More Answers (0)

Categories

Find more on Structures in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!