create structure variable within loop using strings??

조회 수: 14 (최근 30일)
Michael . 2015년 6월 17일
편집: Stephen23 . 2015년 6월 29일
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
  댓글 수: 3
Stephen23 2015년 6월 17일
편집: Stephen23 님. 2015년 6월 29일

댓글을 달려면 로그인하십시오.

채택된 답변

Alberto 2015년 6월 17일
편집: Alberto 님. 2015년 6월 17일
for dive = 1:10
for n = 1:3
data_split(dive).( ['n',num2str(n)]).('var')=var

추가 답변 (1개)

Stephen23 2015년 6월 17일
편집: Stephen23 님. 2015년 6월 18일
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:


Help CenterFile Exchange에서 Characters and Strings에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by