2016-01-21 217 views
0

以下是我正在处理的一段代码,它基于前一个评论的另一个示例。在第一行中,我做了什么路径?我是否一直延伸到Macintosh HD/Users /..../ Documents/MATLAB(该文件夹中的MATLAB文件夹是我正在分析的ascii文件的存储位置),还是从另一个位置开始?我只是不确定在下面的例子中用什么来替换'路径','到','文件夹'。我更加困惑,因为在我的MATLAB窗口中显示的当前目录是存储我正在使用的文件的正确目录。在这种情况下,我该如何处理全文件行?我也试图显示新截断的文件的内容。我怎么做?谢谢!不确定路径位置的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

如果你在MATLAB目录数据,你可以使用'userpath' – Jonas

回答

1

由于文件说,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')); 
+0

好了,如果我什么都不做不是替换文件夹=完整文件(“路径”更多, 'to','文件夹');与文件夹= pwd,解决我的目录混淆。但是现在我该如何确认(通过显示?)这段代码实际上只保存了前80行?谢谢! – Svet

+0

@Svet我推荐阅读**整个**答案,这样你就可以理解为什么简单地设置'folder = pwd'可能是一个坏主意。 – Suever

+0

@Svet尽可能到前80行,这就是这行'矩阵。(f(ii).name)= O(1:80,:);'。你可以自己尝试来验证。 – Suever