1

我的目录中有 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?有没有办法只写第一个字符串然后上传所有数据?

谢谢

4

3 回答 3

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

更新:
您可以使用字符串格式根据文件编号读取文件:

for fi=1:100
    A{fi} = importdata( sprintf('int_%03d.ASC', fi ), ' ', 9 );
    % ...
end
于 2013-03-12T16:14:37.487 回答
4

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

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
于 2013-03-12T16:19:03.827 回答
2

如果你想把这个有点过火:

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

此行执行以下操作

  1. 获取与部分文件名匹配的所有文件的列表,作为结构数组 (h/t Shai)
  2. 对于该数组中的每个元素,importdata从您的原始帖子执行调用。
  3. 将所有输出编译成一个元胞数组。
于 2013-03-12T17:18:48.580 回答