2015-10-29 7 views
0

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

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

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

ответ

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 

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

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

+2

'dir' - правильный путь, но у вас есть ошибки. Это должно быть 'dir ('*. Dat');' и 'fopen (имена файлов (ii) .name, 'r');'. – IKavanagh

+0

@IKavanagh спасибо, у меня было около 40 секунд, прежде чем мой поезд ушел, чтобы быстро напечатать это, теперь я буду расширяться. – Adriaan

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