Performing Action to ALL 'struct' Variables

1 view (last 30 days)
Philip on 19 May 2011
Edited: per isakson on 25 Feb 2018
Is there a way to perform the same action on several variables of type 'struct'?
In my case, I have 30 separate 'struct' variables (with non-logical names), and each of them contains a single vector of 200 elements. I only want to deal with the second half of these elements so I need something like:
struct_name =
But need to keep the name of the struct variable intact. Does anyone have any suggestions?
I hope this made sense!

Accepted Answer

Matt Fig
Matt Fig on 19 May 2011
% Create several structures with different names...
structn.dat = 1:10;
structm.dat = 1:10;
structk.dat = 1:10;
% Now edit the data.
save mystructs structn structm structk
X = load('mystructs');
F = fieldnames(X);
for ii = 1:length(F)
X.(F{ii}).dat = X.(F{ii}).dat(5:10);
% Check
Walter Roberson
Walter Roberson on 19 May 2011
SFN = fieldnames(MyStruct);
for K = 1 : length(SFN)
var_name = SFN{K};
VFN = fieldnames(MyStruct.(var_name));
for N = 1 : length(VFN)
this_field = VFN{N};
if isvector(MyStruct.(var_name).(this_field)) & ...
length(MyStruct.(var_name).(this_field)) > 100
MyStruct.(var_name).(this_field) = MyStruct.(var_name).(this_field)(1:100);

Sign in to comment.

More Answers (1)

Fangjun Jiang
Fangjun Jiang on 19 May 2011
Would this help?
Or, Do you mean keep the struct variable name, not the field names:
Now I think you mean this:
  1 Comment
Philip on 19 May 2011
Apologies - I feared I wasn't very clear.
I meant to say that I have 30 separate variables (of type 'struct'), and each of these has a different name (i.e. fh, cy, de, it etc..). Now, instead of each of them containing 200 elements, I want to 'update' each of them so that they each contain only the last 100.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!

Translated by