checking if a nested field exists

13 views (last 30 days)
A
A on 30 Dec 2020
Commented: Stephen23 on 30 Dec 2020
I have a nested field A.B.C and I would like to check if C exists.
B changes and has a different name depending on what file I use so I can’t do isfield(A.B,C), but I know what B is in this way:
isfield(['A.' D.E.F{i}],'C')
This should give me logical=1, but it gives 0 and I don’t understand why. Any help is much appreciated!
Thanks in advance
  1 Comment
Stephen23
Stephen23 on 30 Dec 2020
"This should give me logical=1, but it gives 0 and I don’t understand why. "
Character vectors do not have fields.

Sign in to comment.

Accepted Answer

Jan
Jan on 30 Dec 2020
Edited: Jan on 30 Dec 2020
In your code:
isfield(['A.' D.E.F{i}],'C')
what is D.E.F{i}? A concatenation with 'A.' will create a char vector. Char vectors are no structs, so isfield replies false as expected.
Try this instead:
% Some test data:
A1.B.C = 1;
A2.AnyStuff = '?';
A2.FunnyName.C = 2;
A3.HasNoC.D = 3;
A3.Nonsense = {};
% TRUE if subfield is existing:
hasSubField(A1, 'C')
hasSubField(A2, 'C')
hasSubField(A3, 'C')
function T = hasSubField(S, F)
T = false;
Data = struct2cell(S);
for k = 1:numel(Data)
if isfield(Data{k}, F)
T = true;
return;
end
end
end
This searchs for a subfield in the first level. If any of the fields is a struct and contains the field provided by the input F, true is replied. Or are you searching for deeply nested structs also?

More Answers (0)

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!