MATLAB - 不确定路径位置的fullfile命令语法

时间:2016-01-21 00:24:04

标签: matlab path directory data-storage

这是我正在处理的一段代码,基于之前评论的另一个例子。

在第一行,我该怎么做?

我是否一直延伸回Macintosh HD/Users/..../Documents/MATLAB(该路径中的MATLAB文件夹是我正在分析的ascii文件的存储位置)还是从另一点开始?

我只是不确定要替换pathtofolder的内容,如下例所示。

我更加困惑,因为我的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

1 个答案:

答案 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'));