MATLAB: How I use fprintf to acess a struct

processing gps datas

I have defined the struct written down.
SATS_Hour = struct('SATS_H0',[],'SATS_H1',[],'SATS_H2',[],'SATS_H3',[],...
'SATS_H4',[],'SATS_H5',[],'SATS_H6',[],'SATS_H7',[],...
'SATS_H8',[],'SATS_H9',[],'SATS_H10',[],'SATS_H11',[],...
'SATS_H12',[],'SATS_H13',[],'SATS_H14',[],'SATS_H15',[],...
'SATS_H16',[],'SATS_H17',[],'SATS_H18',[],'SATS_H19',[],...
'SATS_H20',[],'SATS_H21',[],'SATS_H22',[],'SATS_H23',[]);
I have to access a struct to write on each individual SATS_Hour.SATS_H0 for the first time of my loop, it contains 48 loops. The number after the letter H, of each variable, must change up to the last one 47.
How can I do this?
Using fprintf or other Matlab command?
Thanks for the help.
Gilberto Fernandes

Best Answer

Numbering variables or structure fields is a bad idea. Any time you start naming things sequentially you need to think of using an array instead. Here, for example you'd be better off using a cell array. I.e use:
SATS_Hour = cell(23, 1); %instead of a structure
for idx = 1:23
SATS_Hour{idx} = ...
end
Indexing is always easier than awkward name construction via sprintf. If you're hell bent on using a structure:
for idx = 1:23
SATS_Hour.(sprintf('SATS_H%d', idx)) = ...
end
As you see, it's more complicated, less readable, and probably slower.