Issues with looping in structure: variable in the name

I am loading one Excel spreadsheet with 11 tabs. The 11 tabs are named fl1, fl2,... fl11.
The spreadsheet is currently loaded into a structure named flight_data. I don't like the way it is organized, so I want to create a 11 new structures: somename1, somename2,....somename11.
I think the code will show how I'm trying to structure my data. The goal is to have 11 strutures that look like this:
%my loop that doesn't work
for i = 1:11
fpro(i).loc7.x = flight_data.fpro{i}(:,1)
end
%my structure setup
fpro(i).name = 'Flight Profile {i}';
fpro(i).loc7.x = flight_data.fl{i}(:,1)
fpro(i).loc9.x = flight_data.fl{i}(:,4)
fpro(i).loc10.x = flight_data.fl{i}(:,7)
fpro(i).loc7.y = flight_data.fl{i}(:,2)
fpro(i).loc9.y = flight_data.fl{i}(:,5)
fpro(i).loc10.y = flight_data.fl{i}(:,8)
fpro(i).loc7.z = flight_data.fl{i}(:,3)
fpro(i).loc9.z = flight_data.fl{i}(:,6)
fpro(i).loc10.z = flight_data.fl{i}(:,9)

2 件のコメント

Stephen23
Stephen23 2024 年 8 月 22 日
編集済み: Stephen23 2024 年 8 月 22 日
"...I want to create a 11 new structures: somename1, somename2,....somename11."
Best avoided:
Rather than inefficiently forcing pseudo-indices into variable names just use actual indices into e.g. a structure array. Real indexing will be simpler and much more efficient thatn what you are attempting. Your approach will make working with your data more complex and inefficient.
Joe
Joe 2024 年 8 月 23 日
You are 100% correct...no excuses!

サインインしてコメントする。

 採用された回答

Voss
Voss 2024 年 8 月 22 日

0 投票

I guess this is something like your flight_data variable:
flight_data = struct('fl',{permute(num2cell(rand(10,9,11),[1 2]),[3 1 2])})
flight_data = struct with fields:
fl: {11x1 cell}
flight_data.fl
ans = 11x1 cell array
{10x9 double} {10x9 double} {10x9 double} {10x9 double} {10x9 double} {10x9 double} {10x9 double} {10x9 double} {10x9 double} {10x9 double} {10x9 double}
I think you're going for this:
clear('fpro')
for i = 1:numel(flight_data.fl)
fpro(i).name = sprintf('Flight Profile %d',i);
fpro(i).loc7.x = flight_data.fl{i}(:,1);
fpro(i).loc9.x = flight_data.fl{i}(:,4);
fpro(i).loc10.x = flight_data.fl{i}(:,7);
fpro(i).loc7.y = flight_data.fl{i}(:,2);
fpro(i).loc9.y = flight_data.fl{i}(:,5);
fpro(i).loc10.y = flight_data.fl{i}(:,8);
fpro(i).loc7.z = flight_data.fl{i}(:,3);
fpro(i).loc9.z = flight_data.fl{i}(:,6);
fpro(i).loc10.z = flight_data.fl{i}(:,9);
end
Check some of the results:
fpro
fpro = 1x11 struct array with fields:
name loc7 loc9 loc10
fpro(1)
ans = struct with fields:
name: 'Flight Profile 1' loc7: [1x1 struct] loc9: [1x1 struct] loc10: [1x1 struct]
fpro(2)
ans = struct with fields:
name: 'Flight Profile 2' loc7: [1x1 struct] loc9: [1x1 struct] loc10: [1x1 struct]

2 件のコメント

Joe
Joe 2024 年 8 月 23 日
I had to make a simple adjustment, but it worked. Thanks.
Voss
Voss 2024 年 8 月 23 日
You're welcome!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeMatrix Indexing についてさらに検索

製品

リリース

R2024a

質問済み:

Joe
2024 年 8 月 22 日

コメント済み:

2024 年 8 月 23 日

Community Treasure Hunt

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

Start Hunting!

Translated by