checking if a nested field exists
13 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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 Commento
Stephen23
il 30 Dic 2020
"This should give me logical=1, but it gives 0 and I don’t understand why. "
Character vectors do not have fields.
Risposta accettata
Jan
il 30 Dic 2020
Modificato: Jan
il 30 Dic 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 Commenti
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Structures in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!