如何提取结构元素名称给出部分名称?

时间:2017-04-24 07:34:37

标签: arrays matlab

我目前正在处理大量使用长模拟(3天+)创建的.mat文件(300+)。

这些mat文件中的每一个都包含几个变量,每个变量都以它们在网格上的位置命名(是的,它们是用eval创建的。)

因此我创建了一个按顺序打开每个文件的脚本

s = what(pwd);
s = s.mat;

for i=1:length(s)
    data = open(sprintf('%s',s{i,:}));
    % here goes what I would like to do
end

我现在要做的是提取适合某种模式的数据组件的当前名称。

具体来说,我知道在data中有一个名为coef_%i_%i的向量,我想将其隔离并将其分配给多维数组。

第二部分我知道怎么做,我可以扫描_字符的变量名,隔离整数并将矢量分配到数组中的适当位置。

我的问题是:

  • 在matlab中是否有办法按vectorname = extractname('data.coef*');
  • 的方式做某事

1 个答案:

答案 0 :(得分:3)

假设你有类似的东西:

clear data
% create a dummy field
name = sprintf ( 'coef_%i_%i', randi(100,[2 1]) );
% a data struct with a field which starts "coef*"
data.(name) = rand;
% and your data field may contain some other fields?
data.other = [];

然后,您可以提取出包含coef字符串

的字段
function output = extractname ( data )
  %extract the fieldnames from data:
  fn = fieldnames(data);

  % find all that have coef in them
  index = cellfun(@isempty, strfind(fn,'coef'));
  % remove any that dont have coef in them
  fn(index) = [];

  %You are then left with one(or more) that contain coef in the name:
  output = fn;
end

如果您的数据结构包含可能在名称中的其他位置具有“coef”的字段,则需要通过它们并检查coef是否在开头。您还应该检查函数末尾是否找到了一个且只有一个字段。