有一个函数,将显示所有字段的嵌套结构在MATLAB ?

558(30天)
我有一个嵌套结构,包含结构的水平。
我希望能够查看所有领域的嵌套结构。

接受的答案

MathWorks支金宝app持团队
MathWorks支金宝app持团队 2016年10月17日
没有一个建立在MATLAB函数将显示一个嵌套结构的内容层次结构。
你可以做到这一点通过编写一个函数,递归地导航结构的每个字段并显示其内容。
找到附加一个示例文件,展开。米,它显示嵌套结构的内容。函数的帮助内容包含在其使用的更多信息。
1评论
KAE
KAE 2019年11月20日
这是用于观察多层次xml2struct XML文件读入。我希望有更多的XML工具Matlab,使它容易从许多记录中提取数据。

登录置评。

更多的答案(6)


布伦特F
布伦特F 2021年7月14日
2的评论
布伦特F
布伦特F 2021年9月8日
很好,但是不打印细胞阵列的价值。看第394行:
%打印单元阵列信息,即单元阵列的大小。
%(单元阵列的内容不是印刷)。
我很快补充说这些线显示的东西,但它可能需要更多的通用:
listStr = [listStr;{[strIndent |” 填料 ' ' “:” varStr]});
%添加内容的一维单元阵列(需要概括)
j = 1:长度(结构。(领域))
内容=结构。(领域);
cellStruct =结构([字段 “_” num2str (j)、内容(j));
cellContents = recFieldPrint (cellStruct、缩进深度,printValues、maxArrayLength structname, sortfields);
listStr = [listStr;cellContents];
结束
这是令人难以置信的Matlab默认不提供这个。

登录置评。




杰西卡
杰西卡 2022年1月7日
这就是我了。
S.Conc.HO2.wow = [1:10];
S.Met.Temp = [1:10];
S.Time = [1:400];
名称= unnest_fields(年代,“年代”)
名称=1×3单元阵列
{S.Conc.HO2。哇'}{S.Met。临时的}{' S.Time '}
函数名称= unnest_fields(年代,父母,名称)
植物体内非结构性aka %函数列出所有嵌套的结构体字段。
如果输入参数个数< 2;父母=“年代”;结束%结构名称…
如果输入参数个数< 3;名称= {};结束%体内非结构性字段的名称。
字段=字段名(S);
i = 1:长度(字段)
new_parent = append(父母,“。”{我}),cellstr(字段);
如果{我})~ isa (s(字段,“结构”)
%如果这个领域并不是一个结构然后保存“new_parent”
%输出un-nested字段名称的列表。
名称= horzcat(名称、new_parent);
其他的
%否则递归地看着这一个…“new_parent”。
名称= unnest_fields (s(字段{我}),new_parent,名称);
结束
结束
结束
2的评论
Willingo
Willingo 2022年3月3日
一个可以调用任何索引的结构体数组。
或者一个可以继续使用上面的原始功能和使用arrayfun结构
请注意,这可能会或可能不会“失败”,如果你有相同的字段的名称在不同的层次结构。你可能想要使用独特的(名字)或者存储水平与名字。
大量的选项。
函数名称= unnest_fields(年代,父母,名称)
植物体内非结构性aka %函数列出所有嵌套的结构体字段。
如果输入参数个数< 2;父母=“年代”;结束%结构名称…
如果输入参数个数< 3;名称= {};结束%体内非结构性字段的名称。
% %我的编辑
开关isscalar (S)
情况下1
情况下0
S = (1);
否则
错误(“不可能的”)
结束
% %结束我的编辑
字段=字段名(S);
i = 1:长度(字段)
new_parent = append(父母,“。”{我}),cellstr(字段);
如果{我})~ isa (s(字段,“结构”)
%如果这个领域并不是一个结构然后保存“new_parent”
%输出un-nested字段名称的列表。
名称= horzcat(名称、new_parent);
其他的
%否则递归地看着这一个…“new_parent”。
名称= unnest_fields (s(字段{我}),new_parent,名称);
结束
结束
结束

登录置评。


克里斯汀Florvaag-Dybvik
克里斯汀Florvaag-Dybvik 2023年1月5日
这是一个变种,只有输出的字段名。
> > StructTree (m)
m.Setup
m.Setup.startEdge
m.Setup.magneticDeclination
m.Setup.transectAzimuth
m.Setup.Units
m.Setup.Units.startEdge
m.Setup.Units.magneticDeclination
m.Setup.Units.endGaugeHeight
m.SiteInfo
m.SiteInfo.Site_Name
m.SiteInfo.Station_Number
m.SiteInfo.Location
m.SystemHW
m.SystemHW.SerialNumber
m.SystemHW.FirmwareVersion
m.SystemHW.FirmwareRevision
m.SystemHW.Frequency
m.SystemHW.Frequency.F0
m.SystemHW.Frequency.F1
m.SystemHW.Frequency.F2
函数StructTree(年代,水平,ParentName)
% StructTree(年代,水平,ParentName)
%显示树状结构的结构体(不是值)
%称之为只使用第一输入”StructTree (s)”
%的输入“水平”和“ParentName”仅用于递归调用!
%——克里斯汀Florvaag-Dybvik 2023
如果输入参数个数< 3
ParentName =;
结束
如果输入参数个数< 2
水平= 0;
结束
如果isempty (inputname (1))
= ParentName名称;
其他的
name = inputname (1);
结束
fn =字段名(s);
i = 1:长度(fn)
disp([空白(3 *级别)的名字“。”fn{我}])
如果isstruct (s (fn{我}))。
StructTree (s。(fn{我}),等级+ 1,(名字“。”fn{我}]);
结束
结束

标签

没有标签了。

下载188bet金宝搏


释放

R2006b

社区寻宝

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

开始狩猎!