checking if a nested field exists
13 views (last 30 days)
Show older comments
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
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.
Accepted Answer
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?
0 Comments
More Answers (0)
See Also
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!