在MatLab结构中循环遍历字段名



我有一个MatLab "结构",具有不同的"级别"one_answers"子结构"。当打印到单元格时,"struct"中包含的数据看起来像这样:

report.COUNTRY.SOURCE.SCENARIO.CATEGORY.ENTITY = YEAR YEAR ...;

作为一个最小的例子:

report.HUN.CRF2014.BASEYEAR.CAT0.CO2 = 1991 1992 1993 1994
report.HUN.CRF2014.BASEYEAR.CAT0.CH4 = 1995 1996 1997
report.HUN.CRF2014.BASEYEAR.CAT0.H2S = 1990 1991 1992
report.HUN.CRF2014.BASEYEAR.CAT1.N2 = 1991 1992 1993
report.HUN.CRF2014.BASEYEAR.CAT1.FGASES = 1990 1991 1992

为了生成列出不同变量组合的表,我想循环遍历"struct"中包含的字段名。

我目前正在尝试编写一个能够做到这一点的函数:

fields=fieldnames(struct);
for categoryidx=1:length(fields)
categoryname=fields{categoryidx};
    if isstruct(struct.(categoryname))
        category=fieldnames(struct.(categoryname));
        for entityidx = 1:length(category);
            entityname = category{entityidx};
            if isstruct(struct.(categoryname).(entityname))
            gases=fieldnames(struct.(categoryname).(entityname));
            end
        end
    end
end

不幸的是,这只是产生任何东西!有人知道如何在这样的matlab结构中循环字段名吗?谢谢你!

你可能想看看:struct2tabler。这是一个MATLAB函数,递归地通过一个结构转换成一个表。

例如:

。A = 5
A.B.C = 10
A.B.D = 15

返回一个表:

a_a,a_b_c,a_b_d
---------------------------
5,,,,10,,,,,15

免责声明:我已经写了struct2table,所以可能有点偏见,但是它是出于需求而创建的,我认为,与您的非常相似。

最新更新