检查存在嵌套的字段

5视图(30天)
迈克尔Schwager
迈克尔Schwager 2016年11月8日
评论道: Stephen23 2020年5月18日
我有一个结构体嵌套的领域,比如cfg.accel。文件名,cfg.accel。校准,cfg.gyro。文件名等。有时该字段存在,有时他们不,在不同层次上。在上面的例子中,“陀螺”字段可能缺失,或者它可能只是cfg.accel。校准可能缺失。
有没有一种方法来检查深度嵌套域?目前我在做类似:
topstruct =结构(等等)
如果isfield (topstruct“f1”)
如果isfield (topstruct.f1“f2”)
如果isfield (topstruct.f2“fleaf”)
do_something (topstruct.f1.f2.fleaf)
结束
结束
结束
理想情况下,我想做一些事情像doifget (mystruct、行动、field1, field2,…),除非mystruct.field1行动实际上并不是评估。field2存在。也许行动可以是一个λ/匿名函数。
可能只是像getif (mystruct, field1, field2,…)返回[]如果字段不存在,如果它和价值。
3评论

登录置评。

接受的答案

托尔斯滕
托尔斯滕 2016年11月10日
你可以用我的函数isnestedfield:
函数yn = isnestedfield(年代,字段)
% ISNESTEDFIELD真实如果嵌套结构字段。
% ISNESTEDFIELD(年代,字段)返回true,如果字符串字段包含
% S的嵌套域的格式的一个字符串字段名
%隔开的。”
%
%的例子:
%如果s.f1.f11检查。f111字段:
% isfield(年代,“f1.f11.f111”)
%
% Thorsten.Hansen@psychol.uni-giessen.de 2016-11-10
%提取字段
场= textscan(字段,' % s ',“分隔符”,“。”);
字段=字段{1};
yn = true;
structstr =“年代”;%的名字第一个输入参数
i = 1;
yn & &我< =元素个数(字段)
% disp ([' yn = isstruct (structstr)))
eval ([“yn = isstruct (”structstr”),“]);
如果yn
% disp ([' yn = isfield (“structstr”、“现场{我}”)'))
eval ([“yn = isfield (”structstr字段{我});”]);
结束
如果yn
structstr = strcat (structstr,“。”字段{我});
我=我+ 1;
结束
结束

更多的答案(0)

类别

找到更多的在变量帮助中心文件交换

s manbetx 845

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!