检查是否存在嵌套字段

7次浏览(过去30天)
迈克尔Schwager
迈克尔Schwager 2016年11月8日
评论道: Stephen23 2020年5月18日
我有一个带有一些嵌套字段的结构,如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,…)这样的东西,如果字段不存在,则返回[],如果存在则返回值。
3评论

登录评论。

接受的答案

托尔斯滕
托尔斯滕 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;
结束
结束

更多答案(0)

类别

了解更多变量帮助中心而且文件交换

下载188bet金宝搏

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!