# How to create new structure with each for loop?

33 views (last 30 days)
Nicholas Kavouris on 10 Apr 2022
Commented: Stephen23 on 10 Apr 2022
I am trying to take a large dataset with mutlple fields and segment it and place it into unique structure with each for loop
if numel(start)==numel(stop)
for k=1:numel(start);
j=start(k):stop(k)+900;
field1="number"; value1=k;
field2='grill_state'; value2=grill_state(j) ;
field3='Set_Temp'; value3=SetTempF(j);
field4='TempF'; value4=Temp_F(j);
field5='AugerRPM'; value5=Auger_RPM(j);
strcat('Cook',num2str(k))=struct(field1,value1,field2,value2,field3,value3,field4,value4,field5,value5);
end
end
The goal is to take all values indexed between start and stop and place them into a structure titled Cookn for 1-n number of cooks.
so if there are 5 start points then loop should return struct cook1-cook5. Where am i going wrong?
Stephen23 on 10 Apr 2022
"Where am i going wrong?"
You are trying to force numbers into variable names.
Doing so is possible, but only if you want to write slow, complex, inefficient, buggy code:
The neat, simple, and very efficient MATLAB approach is to use indexing, just as Matt J shows.

Matt J on 10 Apr 2022
if numel(start)==numel(stop)
N=numel(start);
clear Cook
for k=N:-1:1
j=start(k):stop(k)+900;
Cook(k).number=k;
Cook(k).grill_state=grill_state(j) ;
Cook(k).Set_Temp=SetTempF(j);
Cook(k).TempF=Temp_F(j);
Cook(k).AugerRPM=Auger_RPM(j);
end
end
##### 2 CommentsShow 1 older commentHide 1 older comment
Matt J on 10 Apr 2022
The backward loop forces Matlab to create the Nth structure array element first. As a result, it forces the entire structure array to be pre-allocated after the first iteration of the loop.

### Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

R2021b

### Community Treasure Hunt

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

Start Hunting!