我希望从目录中读取文件,并在每个文件上迭代执行操作。此操作不需要更改文件。
我知道我应该为此使用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: - )
答案 0 :(得分:21)
首先获取符合条件的所有文件的列表:
(在本例中 C:\ My Documents \ MATLAB 中的 pdb 文件)
matfiles = dir(fullfile('C:', 'My Documents', 'MATLAB', '*.pdb'))
然后按如下方式读入文件:
(此处 i
可以从1到文件数量不等)
data = load(matfiles(i).name)
重复此操作,直到您阅读完所有文件为止。
如果重命名文件,更简单的替代如下: -
首先保存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
答案 1 :(得分:2)
我从雅虎的答案中复制这个!它对我有用
% 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