MATLAB如何自动读取多个文件

时间:2015-10-29 14:34:50

标签: matlab graph plot matlab-figure automatic-properties

我想从不同的数据文件中绘制一些3D图形。例如我正在使用

fid = fopen('SS   1.dat','r');

读取第一个文件,然后绘制图形。如何设置程序将名称更改为' SS 2.dat'自动?同样对于第十个文件,名称变为' SS 10.dat'它有一个空间少(即SS和10之间只有两个空格),然后是第一到第九个文件。如何设置程序来调整?谢谢。

3 个答案:

答案 0 :(得分:3)

使用dir

filenames = dir('*.dat'); %//gets all files ending on .dat in the pwd
for ii =1:length(filenames)
    fopen(filenames(ii),'r');
    %//Read all your things and store them here
end

dir的优点与此处的其他解决方案相反,无论您如何调用文件,都可以在一行中获取pwd(当前工作目录)的内容。这样可以更轻松地加载文件,因为您没有任何动态文件名的麻烦。

答案 1 :(得分:2)

prefix = 'SS';

for n = 1:10
    if n == 10
        filename = [prefix ' ' num2str(n) '.dat'];
    else
        filename = [prefix '  ' num2str(n) '.dat'];
    end
    fid = fopen(filename, 'r');
    ...
end

答案 2 :(得分:2)

以下代码显示了一种从您提到的名称从1到999打印的惰性方法:

for ii=1:999
    ns = numel(num2str(ii));
    switch ns
    case 1
        fname = ['ss   ' num2str(ii) '.dat'];
    case 2
        fname = ['ss  ' num2str(ii) '.dat'];
    case 3
        fname = ['ss ' num2str(ii) '.dat'];
    end
end

另一种方式:

是在文件名格式化中使用反斜杠字符,如下所示:

fstr = 'ss   ';
for ii = 1:999
        ns = numel(num2str(ii));
        for jj = 1:ns-1
            fstr = [fstr '\b'];
        end
        ffstr = sprintf(fstr);
        fname = [ffstr num2str(ii) '.dat'];
        disp(fname);
end

有很多更好的方法可以做到这一点