MATLAB - читать файлы из каталога?

Я хочу читать файлы из каталога и итеративно выполнять операцию над каждым файлом. Эта операция не требует изменения файла.

Я понимаю, что для этого я должен использовать цикл for. До сих пор я пробовал:

FILES = ls('path\to\folder');

for i = 1:size(FILES, 1);
    STRU = pdbread(FILES{i});
end

Возвращенная здесь ошибка предлагает мне, новичку, что список каталогов с ls() не присваивает содержимое структуре данных.

Во-вторых, я попытался создать файл, содержащий в каждой строке путь к файлу, например,

C:\Documents and Settings\My Documents\MATLAB\asd.pdb
C:\Documents and Settings\My Documents\MATLAB\asd.pdb

Затем я прочитал этот файл, используя следующий код:

fid = fopen('paths_to_files.txt');
FILES = textscan(fid, '%s');
FILES = FILES{1};
fclose(fid);

Этот код читает файл, но создает новую строку, где в пути существует пробел, т.е.

'C:\Documents'
'and'
'Setting\My'
'Documents\MATLAB\asd.pdb'

В конечном итоге я решил использовать цикл for

for i = 1:size(FILES, 1)
    PDB = pdbread(char(FILES{i}));

чтобы прочитать каждый файл, но pdbread() выдает ошибку, заявляя, что файл имеет неправильный формат или не существует.

Это связано с разделом путей новой строки, когда файл пути читается?

Любая помощь или предложения сильно оценены.

Спасибо, S: -)

Ответы

Ответ 1

Сначала Получить список всех файлов, соответствующих вашим критериям:
(в этом случае pdb файлы в C:\Мои документы \MATLAB)

matfiles = dir(fullfile('C:', 'My Documents', 'MATLAB', '*.pdb'))

Затем прочитайте в файле следующим образом:
(Здесь i может варьироваться от 1 до количества файлов)

data = load(matfiles(i).name)

Повторяйте это, пока не прочитаете все ваши файлы.


A более простая альтернатива, если вы можете переименовать свои файлы следующим образом: -

Сначала сохраните reqd. файлы как 1.pdb, 2.pdb, 3.pdb,... и т.д.

Затем код для их итеративного чтения в Matlab выглядит следующим образом:

for i = 1:n
    str = strcat('C:\My Documents\MATLAB', int2str(i),'.pdb'); 
    data = load(matfiles(i).name);

% use our logic here  
% before proceeding to the next file

end

Ответ 2

Я копирую это из ответов yahoo! Это сработало для меня

% copy-paste the following into your command window or your function

% first, you have to find the folder
folder = uigetdir; % check the help for uigetdir to see how to specify a starting path, which makes your life easier

% get the names of all files. dirListing is a struct array. 
dirListing = dir(folder);

% loop through the files and open. Note that dir also lists the directories, so you have to check for them.
for d = 1:length(dirListing)
    if ~dirListing(1).isdir
        fileName = fullfile(folder,dirListing(d).name); % use full path because the folder may not be the active path

        % open your file here 
        fopen(fileName)

        % do something

    end % if-clause
end % for-loop