对于具有结构的循环+;matlab

对于具有结构的循环+;matlab,matlab,for-loop,data-structures,Matlab,For Loop,Data Structures,我有一个名为sacfile的结构,其中包含各种站点的数据(sta1-sta6)。SACPile进一步细分为日增量(sacpile.day,每个站点),并进一步细分为每天的小时增量(sacpile.day.hour)。我想通过每天循环,然后通过每个站的每个小时进行比较(即,第032天循环通过sta1小时1,与sta2小时1、sta3小时1、sta4小时1、sta5小时1、sta6小时1等进行比较,然后转到第二天,等等。你明白了。站点在sacfile.sta中定义。有人对我如何简单地做到这一点有任何

我有一个名为sacfile的结构,其中包含各种站点的数据(sta1-sta6)。SACPile进一步细分为日增量(sacpile.day,每个站点),并进一步细分为每天的小时增量(sacpile.day.hour)。我想通过每天循环,然后通过每个站的每个小时进行比较(即,第032天循环通过sta1小时1,与sta2小时1、sta3小时1、sta4小时1、sta5小时1、sta6小时1等进行比较,然后转到第二天,等等。你明白了。站点在sacfile.sta中定义。有人对我如何简单地做到这一点有任何建议吗

*我只想在同一天和同一小时内循环各个站点,然后继续到下一天和下一小时。我不想交叉比较不同的日期和时间。这对循环很重要

我尝试了以下方法:

      for i = 1:length(sacfile)
          for j = 1:length(sacfile(i,1).day)
              for h = 1:length(sacfile(i,1).day.hour)
但这似乎贯穿了每一个小时点。这是否有效,我如何才能保证它在正确的日子里循环,也就是说,sta1的第一天与sta2的第一天是相同的

以下是其中一种结构的示例:

        name: '2013.032.00.00.00.0000.TA.POKR..BHE.sac'
        date: '31-Mar-2014 12:25:33'
        bytes: 11949036
        isdir: 0
        datenum: 7.3569e+05
        net: 'TA'
        sta: 'POKR'
        loc: ''
        comp: 'BHE'
        day: [1x1 struct]
        data: [2987101x1 double]
        time: [1x2987101 double]
        header: [1x1 struct]

唯一相关的是net、sta、loc、comp、day和data。net、sta、loc、comp是文件的关键标识字段。名称是文件的名称。day将数据分为几个小时。有意义吗?

如果我很好地理解了您的问题,函数
extractfield()
fieldnames())
应该有帮助

fields = fieldnames(sacfile);

for i = 1:numel(fields)
    b = extractfield(sacfile.(fields{i}).day, 'day3');
    c(i) = extractfield(b{1}.hour, 'hour_x');
end

函数
extractfield()
返回包含结构而不是结构本身的1x1单元格。这就是为什么我要
b{1}

语言?尝试?错误?很抱歉,我编辑了matlab。到目前为止,我只是将其分为几天和几小时。我正在努力寻找循环的最佳方式。我尝试的每一种方式似乎都不正确。我尝试了:似乎你想将“小时”循环置于“天”之外循环,但显然这与您当前的数据结构方式不符。您的结构中还有其他字段吗?举一个小例子。您需要在内部
for
循环中使用
if
语句来检查两个结构的天数和小时数是否相等,如果该条件为真,则进行处理,然后跳过否则,我相信对于
extractfield
函数,您需要映射工具箱。