Matlab中的动态结构域名 - 为初学者提供建议?

时间:2014-03-06 21:09:57

标签: regex matlab dynamic data-structures cell-array

我有>我使用dir(* .txt)读入变量“files”的10个文本文件。这些文件由大小为100x1000的不同尺寸的矩阵组成。每个文件的格式都相同(L \ d {1,2} N_20 \ d {2} .txt),因此,在短暂的用户的帮助下,我能够动态地实现一个很好的例程从文件名的某些部分生成嵌套结构中的字段名。这已经朝着正确的方向走了一百万英里,帮助我实现了我的最终目标,但仍有一个谜团:在我的英雄的最后一段代码中,他建议我写道:

for ix_id = 1:length(ids)
  for ix_year=1:length(ids_years{ix_id})
    data.(ids{ix_id}).(['Y' ids_years{ix_id}{ix_year}]) = ...
                         'read in my data here for each one';
  end
end

不幸的是,我昨天第一次试图使用正则表达式和结构。该代码创建了许多结构字段,这些字段等于我要加载的文件数,调查显示

names=fieldnames(data)

给出

names =
    {
       [1,1] = L14N
       [2,1] = L6N
    }

names2=fieldnames(data.L14N)

给出

names2 =
{
   [1,1] = Y2009103
   [2,1] = Y2010087
}

这正是我想要的,但我只是不明白如何'在这里读取我的数据......'。我想将名称中包含L14N和2009103的文件放在结构中标识为data.L14N.Y2009103的部分中,依此类推。由于看起来我的数据以正确的顺序读入,我尝试添加外部循环:

for jx = 1:numel(files)
  for ix_id=1:length(ids)
    for ix_year=1:length(ids_years{ix_id})
      data.(ids{ix_id}).(['Y' ids_years{ix_id}{ix_year}]) = dlmread(files{jx})
    end
  end
end

但是,当然,这导致结构的所有字段仅包含在文件{numel(files)}中找到的矩阵(即,我的循环的最后一次迭代)。

冒着提出错误问题的风险,有人可以帮助我打破我应该读取数据的方式吗?这是避免评估的一个复杂的策略,但我开始怀疑我是否疯狂尝试。

1 个答案:

答案 0 :(得分:2)

你已经有了这个名字,但分成了几个部分。

ids{ix_id}例如L6N

['Y' ids_years{ix_id}{ix_year}]例如Y2010087

要取回文件名,请将这些部分放在一起:

[ids{ix_id} '_' ids_years{ix_id}{ix_year} '_2000MHZ.txt']