checking if a nested field exists
13 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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 Kommentar
Stephen23
am 30 Dez. 2020
"This should give me logical=1, but it gives 0 and I don’t understand why. "
Character vectors do not have fields.
Akzeptierte Antwort
Jan
am 30 Dez. 2020
Bearbeitet: Jan
am 30 Dez. 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 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Structures finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!