由于文件说,fullfile
可以构建一个文件名从它的部分,而不必担心是否使用/或\作为文件分隔符,没有旧的做事
filename = ['path' filesep 'to' filesep 'files'];
真正混乱的方式
甚至更糟!
folder = '/path/to/file';
如果您尝试在操作系统之间切换,则会遇到各种问题。
在您所提供的例子可能是
folder = fullfile('Users', 'Documents', 'MATLAB')
边注:请不要实际上您的数据存储文件夹中
你是正确的,如果你的文件试图加载是在你的当前目录,那么你不需要folder
变量,因为如果你只是键入dlmread(filename)
它将工作。
但问题是,这是要求,用户在一个特定的目录中运行您的代码,它可能不清楚该用户是什么文件夹。您提供的代码更强大,因为它不依赖于当前目录。在我看来,最好的做法是永远不要依赖当前目录。在我看来,没有什么比看到某个人在MATLAB内更改目录更糟了,所以他们可以访问他们的数据!
记住因此保持什么fullfile
不,我会在下面标注
folder = fullfile('path', 'to', 'folder');
存储你的代码路径到您的数据的生命。如果您的数据位于fullfile(pwd, 'data')
中,这可以是绝对路径(如您在您的问题中所述)'/Users/blah/data'
或相对于当前目录的路径'data'
。前者是我的首选方法。
f = dir(fullfile(folder, '*.asc'));
这对寻找具有.asc
扩展该文件夹中的所有文件/文件夹调用dir
。
name = fullfile(folder, f(ii).name);
此行构建感兴趣的文件的绝对路径,因为dir
只返回文件名,而不是它住在(我最大的烦恼之一)的文件夹。
O = dlmread(name);
然后很明显这会使用提供的完整路径读取您的实际文件。
同样,这里真正的好处是你不必在特定的目录下执行这段代码。
因此,直接回答你的问题,现在你知道所有这一切。如果您的数据存在于当前目录中,您可以设置folder
当前目录
folder = pwd;
或者,如果你想善待别人和你的未来的自己,你可以指定一个绝对路径(最好是作为一个函数传递论点,而不是硬编码)
function matrices = getfiles(folder)
f = dir(fullfile(folder, '*.asc'));
matrices = struct();
for ii = 1 : numel(f)
name = fullfile(folder, f(ii).name);
O = dlmread(name);
matrices.(f(ii).name) = O(1:80,:);
end
end
matrices = getfiles(fullfile('user', 'defined', 'path', 'to', 'data'));
如果你在MATLAB目录数据,你可以使用'userpath' – Jonas