如何在MATLAB中一步加载100个具有相似名称和/或字符串的文件?

时间:2013-03-12 16:12:23

标签: matlab ascii filenames string-formatting matlab-load

我的目录中有100个ASCII文件,其名称如下:

  

int_001.ASC
  int_002.ASC
  int_003.ASC
  。
  。
  。
  int_099.ASC
  int_100.ASC

我必须使用importdata在MATLAB中导入它们,这应该如下工作:

A = importdata('int_001.ASC', ' ', 9)
x = A.data(:,1)
y = A.data(:,2)

我的问题是:如何避免写{100}次importdata?有没有办法只写第一个字符串,然后上传所有数据?

由于

3 个答案:

答案 0 :(得分:10)

fls = dir( 'int_*.ASC' );
for fi=1:numel(fls)
    A{fi} = importdata( fls(fi).name, ' ', 9 );
    % ...
end

<强>更新
您可以使用string formatting根据数字读取文件:

for fi=1:100
    A{fi} = importdata( sprintf('int_%03d.ASC', fi ), ' ', 9 );
    % ...
end

答案 1 :(得分:4)

您可以在for循环中使用strcat函数:

for k=1:n
    fileName = strcat('int_',num2str(k, '%03d'),'.ASC');
    A(k) = importdata(fileName, ' ', 9);
    x(k) = A(k).data(:,1);
    y(k) = A(k).data(:,2);
end

答案 2 :(得分:2)

如果你想稍微过分:

alldata = arrayfun(...
    @(dirEntry)importdata(dirEntry.name, ' ', 9), ...
    dir('int_*.ASC'),...
    'uniformoutput',false);

此行执行以下操作

  1. 获取与部分文件名匹配的所有文件的列表,作为结构数组(h / t Shai)
  2. 对于该数组中的每个元素,请执行原始帖子中的importdata调用。
  3. 将所有输出编译为单元格数组。