图片缩略图

以递归方式获取结构字段名

version 1.0.0.0 (3.04 KB) by 亚当
返回一个结构的字段名,包括任何“子结构”的字段名。
4.8
19日评级

23下载

更新2011年10月13日

查看许可协议

NAMES = fieldnamesr(S)返回一个字符串单元格数组,其中包含与S相关联的结构字段名,属于S的任何结构的结构字段名,属于S的任何结构的结构字段名,等等。

NAMES = fieldnamesr(S,DEPTH)是一个可选字段,它允许定义搜索的深度。默认值是-1,不限制深度搜索。深度为1将只返回s的字段名(类似于FIELDNAMES)。深度为2将返回这些字段名,以及字段为s的任何结构的字段名,等等。

NAMES = fieldnamesr(…,'full')返回结构字段的名称,以及这些结构的内容,作为独立的单元格。这与返回结构树的默认情况不同。

NAMES = fieldnamesr(…,'prefix')返回以输入结构的名称为前缀的字段的名称。

NAMES = fieldnamesr(…,'struct')只返回结构字段的名称。

引用作为

亚当(2021)。以递归方式获取结构字段名(//www.tatmou.com/matlabcentral/fileexchange/33262-get-structure-field-names-in-recursive-manner), MATLAB中央文件交换。检索

意见及评分(24

托马斯·科夫

谢谢!。在我的例子中,它工作得很好,结构是由to-workspace块记录的。

莫拉Monville

很好的代码。不幸的是,没有返回结构节点的值

RadioactiveMen

太棒了。时期。

弗洛里安

太棒了!

迈克尔

太完美了,省了我几天的工作!

金车Schooten

克里斯托夫Peterffy

迪帕克kiran

你好亚当,

对于一个非常复杂的结构,我得到这个错误。

fieldnamesr出错(第95行)
if isstruct(eval(NAMES{i})) == 1

期望一个花括号或点索引表达式的输出,但有两个结果。

fieldnamesr出错(第95行)
if isstruct(eval(NAMES{i})) == 1

Koray s呃

肖恩·戈尔

对我不起作用:
它落在一个结构体上,其格式如下:
(1)。b =…
(2)。b =…
因为第95行eval (a.b{1})给出了一个错误。
期望一个花括号或点索引表达式的输出,但确实有
149的结果。”

z8080

你好亚当

在调用
“满”fieldnamesr (SPM)
,其中SPM是由神经成像软件SPMa产生的复杂结构变量,我得到误差

期望从花括号或点索引表达式输出一个结果,但有8个结果。

fieldnamesr出错(第95行)
if isstruct(eval(NAMES{i})) == 1

知道如何编辑脚本以便解析任何复杂的结构吗?谢谢!

z8080

你好亚当

在调用
“满”fieldnamesr (SPM)
,其中SPM是一个复杂的结构变量,得到误差

期望从花括号或点索引表达式输出一个结果,但有8个结果。

fieldnamesr出错(第95行)
if isstruct(eval(NAMES{i})) == 1

你知道怎么修理吗?谢谢!

法anicio

布拉德利里德尔

太棒了,谢谢!

Pieter

我必须修改3行才能让它生效:
68:名称= cellfun (@ (x) strcat((1)。,x,“(1)”),字段名,“UniformOutput”,假);
99:名字{我}),x,“(1)”),fndtemp2, UniformOutput,假);
125:名称= cellfun (@ (x) regexprep (x,“[(1)]”,“),名字,UniformOutput,假);

问候,
Pieter

亚当Danz

好作品,谢谢分享!我将使用它灵活地访问具有相同字段和子字段名称但不一定具有相同结构顺序的结构。

MrTwister

正如我所希望的!
谢谢!

埃米尔

让我不用自己写剧本……:)

乍得韦伯

省了我写的麻烦。刚开始的时候效果很好。还没有在结构体数组上测试,但满足我目前的需求。谢谢!

乍得韦伯

SpinMan

当我尝试时,这个函数抛出以下错误

s = fieldnamesr (a)

.d a.b.c(1,1)。e = 1
a.b.c (2, 1) .d的地方。e = 2
在a.b.c .d(3,1)。e = 3

???非标量结构上的点名引用。

Error in ==> fieldnamesr at 95
if isstruct(eval(NAMES{i})) == 1

我得到相同的错误与R2011a和R2008a。

SpinMan

MATLAB版本兼容性
创建R2011b
与任何版本兼容
平台的兼容性
窗户 macOS Linux

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!