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