MATLAB how to automatically read a number of files

2020-05-07 02:41发布

I would like to plot a number of 3D graphs from different data files. For example I am using

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

to read the first file and then plot a graph. How to set the program to change the name to 'SS 2.dat' automatically? Also for the tenth file the name becomes 'SS 10.dat' which has one space less (i.e.only two space between SS and 10) then the first to ninth files. How to set the program to adjust for that? Thank you.

3条回答
时光不老,我们不散
2楼-- · 2020-05-07 03:38
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
查看更多
Animai°情兽
3楼-- · 2020-05-07 03:41

The following code displays a lazy way to print the names from 1 to 999 that you mentioned:

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

Another way:

is to use the backslash character in the formatting of the filename as follows:

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

there are many better ways to do this though

查看更多
我只想做你的唯一
4楼-- · 2020-05-07 03:41

Use 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

The beauty of dir as opposed to the other solutions here is that you can get the contents of the pwd (present working directory) in one single line, regardless of how you called your files. This makes for easier loading of files, since you do not have any hassle with dynamic file names.

查看更多
登录 后发表回答