create structure variable within loop using strings??

27 views (last 30 days)
within a loop I would like to do something along the lines of the following:
for dive = 1:10
for n = 1:3
(['data_split(',num2str(dive),').n',num2str(n),'.var']) = var;
so that I end up with a structure like:
data_split(1).n1.var for n= 1:3 and dive = 1:10

Sign in to comment.

Accepted Answer

Alberto on 17 Jun 2015
Edited: Alberto on 17 Jun 2015
for dive = 1:10
for n = 1:3
data_split(dive).( ['n',num2str(n)]).('var')=var

More Answers (1)

Stephen23 on 17 Jun 2015
Edited: Stephen23 on 18 Jun 2015
This is easy with a bit of help from the documentation, but first we have to understand that these are two separate operations that we are trying to do. Lets look at them:
1) Indexing of a Non-Scalar Structure. Just like any array in MATLAB a structure can be non-scalar, and is indexed using logical or subscript indexing:
>> A(3).data = 9;
>> A(2).data = 3;
>> A(1).data = 1
A =
1x3 struct array with fields:
>> []
ans =
1 3 9
You can use all the usual indexing methods here, plus some very handy shortcuts: check out the link I gave above.
2) Using Dynamic Fieldnames to define or access structure fields. These are also written using parentheses:
>> B.('data') = 2;
>> B.('another_field') = 4
B =
data: 2
another_field: 4
Combining These...
So we can easily combine these two operations like this:
for dive = 1:10
for n = 1:3
tmp = sprintf('n%d',n);
data_split(dive).(tmp).var = XXX;
Note that using sprintf is usually a more robust way to construct strings, compared to string concatenation. It also makes the intent clearer, as the sequence is clearly defined in the format string.
PS: using eval to generate variable names or perform basic operations in MATLAB really should avoided. Although beginners seem to love variables magically appearing an disappearing from workspace it is not a robust way to program and only makes their own lives more difficult. Read this to know more:


Find more on Loops and Conditional Statements 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!

Translated by