检查是否存在嵌套字段
7次浏览(过去30天)
显示旧的注释
我有一个带有一些嵌套字段的结构,如cfg.accel。文件名,cfg.accel。校准,cfg.gyro。文件名等。在不同的层次上,这些场有时存在,有时不存在。在上面的例子中,'陀螺'字段可能会丢失,或者它可能只是cfg. accelerate .calibration可能会丢失。
是否有一种方法可以检查深度嵌套的字段?目前我在做的事情是:
Topstruct = struct(随便...)
如果isfield (topstruct“f1”)
如果isfield (topstruct.f1“f2”)
如果isfield (topstruct.f2“fleaf”)
do_something (topstruct.f1.f2.fleaf)
结束
结束
结束
理想情况下,我想做一些类似doifget(mystruct, action, field1, field2,…)的事情,其中action实际上不被评估,除非mystruct.field1。field2存在。也许action可以是一个匿名函数。
可能只是像getif(mystruct, field1, field2,…)这样的东西,如果字段不存在,则返回[],如果存在则返回值。
接受的答案
托尔斯滕
2016年11月10日
你可以使用isnestedfield函数:
函数Yn = isnestedfield(s, fields)
%ISNESTEDFIELD如果嵌套字段在结构中,则为True。
如果包含字符串FIELDs, % ISNESTEDFIELD(S,FIELDs)返回true
% S的嵌套字段,格式为一个字段名字符串
%由'分隔。'
%
%的例子:
检查s.f1.f11. %F111是一个字段:
% isfield(s, 'f1.f11.f111')
%
% Thorsten.Hansen@psychol.uni-giessen.de 2016-11-10
%提取字段
字段= textscan(字段,' % s ',“分隔符”,“。”);
字段=字段{1};
Yn =真;
structstr =“年代”;第一个输入参数的名称
I = 1;
而Yn && I <= numel(field)
% disp(['yn = isstruct(' structstr ')'])
eval (['yn = isstruct('structstr”),“]);
如果yn
% disp ([' yn = isfield(“structstr”、“现场{我}”)'))
eval (['yn = isfield('structstr字段{我});”]);
结束
如果yn
Structstr = strcat(Structstr,“。”字段{我});
I = I + 1;
结束
结束