Performing Action to ALL 'struct' Variables

5 views (last 30 days)
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 = struct_name.data(100:end)
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);
end
% Check
X.structm.dat
  8 Comments
Philip
Philip on 19 May 2011
Perfect - thanks for your help!! Now to work out how to get just the last 100 elements for each!
Thanks again!
Walter Roberson
Walter Roberson on 19 May 2011
Edited: per isakson on 25 Feb 2018
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);
end
end
end

Sign in to comment.

More Answers (1)

Fangjun Jiang
Fangjun Jiang on 19 May 2011
Would this help?
a(200).b=1;
a(200).c=0;
NewStruct=a(100:end);
Or, Do you mean keep the struct variable name, not the field names:
a(1:99)=[];
Now I think you mean this:
a.Data=1:200;
a.Data(1:100)=[]
  1 Comment
Philip
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.

Categories

Find more on Structures in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!