MATLAB, как автоматически читать несколько файлов

Я хотел бы построить несколько трехмерных графиков из разных файлов данных. Например, я использую

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

чтобы прочитать первый файл, а затем построить график. Как настроить программу на автоматическое изменение имени на «SS 2.dat»? Также для десятого файла имя становится «SS 10.dat», в котором на один пробел меньше (т.е. только два пробела между SS и 10), чем в файлах с первого по девятый. Как настроить программу на это? Спасибо.


person Kelvin S    schedule 29.10.2015    source источник


Ответы (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

хотя есть много лучших способов сделать это

person NKN    schedule 29.10.2015

Используйте 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 (текущий рабочий каталог) в одной строке, независимо от того, как вы назвали свои файлы. Это облегчает загрузку файлов, так как у вас нет проблем с динамическими именами файлов.

person Adriaan    schedule 29.10.2015
comment
dir это правильный путь, но у вас есть ошибки. Должно быть dir('*.dat'); и fopen(filenames(ii).name,'r');. - person IKavanagh; 29.10.2015
comment
@IKavanagh спасибо, у меня было около 40 секунд до отправления поезда, чтобы быстро напечатать это, сейчас я расширю. - person Adriaan; 30.10.2015