这是我正在处理的一段代码,基于之前评论的另一个例子。
在第一行,我该怎么做?
我是否一直延伸回Macintosh HD/Users/..../Documents/MATLAB
(该路径中的MATLAB文件夹是我正在分析的ascii
文件的存储位置)还是从另一点开始?
我只是不确定要替换path
,to
,folder
的内容,如下例所示。
我更加困惑,因为我的MATLAB窗口中显示的当前dir
是存储我正在使用的文件的正确值。
在这种情况下,我该怎么处理fullfile
行?我也试图显示新截断文件的内容。我怎么做?谢谢!
folder = fullfile('path', 'to', '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
答案 0 :(得分:2)
正如文档所说,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');
存储数据所在的路径。如果您的数据位于'/Users/blah/data'
,则可以是绝对路径(如您在问题中所述)'data'
或相对于当前目录fullfile(pwd, 'data')
的路径。前者是我的首选方法。
f = dir(fullfile(folder, '*.asc'));
这会调用dir
查找该文件夹中扩展名为.asc
的所有文件/文件夹。
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'));