Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB-不确定路径位置的fullfile命令语法_Matlab_Path_Directory_Data Storage - Fatal编程技术网

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

MATLAB-不确定路径位置的fullfile命令语法,matlab,path,directory,data-storage,Matlab,Path,Directory,Data Storage,下面是我正在编写的一段代码,基于前面评论中的另一个示例 在第一行中,我的路径是什么? 我是一直延伸到Macintosh HD/Users/…/Documents/MATLAB(该路径中的MATLAB文件夹是存储我正在分析的ascii文件的地方)还是从另一个点开始 我只是不确定要用什么替换下例中的路径,到,文件夹。 我甚至更困惑,因为我的MATLAB窗口中显示的当前dir是存储我正在处理的文件的正确位置 在这种情况下,如何处理fullfile行?我还试图显示新截断文件的内容。我该怎么做?谢谢 fo

下面是我正在编写的一段代码,基于前面评论中的另一个示例

在第一行中,我的路径是什么?

我是一直延伸到
Macintosh HD/Users/…/Documents/MATLAB
(该路径中的MATLAB文件夹是存储我正在分析的
ascii
文件的地方)还是从另一个点开始

我只是不确定要用什么替换下例中的
路径
文件夹

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

正如文档所说,它允许您从文件的各个部分构造文件名,而不必担心是否使用/或\作为文件分隔符,也不必像以前那样乱七八糟地进行操作

filename = ['path' filesep 'to' filesep 'files'];
甚至更糟

folder = '/path/to/file';
如果你试图在操作系统之间切换,你会遇到各种各样的问题

在您提供的示例中,它可以是

folder = fullfile('Users', 'Documents', 'MATLAB')
旁注:请不要将您的数据实际存储在该文件夹中

如果要加载的文件位于当前目录中,则不需要
文件夹
变量,因为只要键入
dlmread(filename)
即可

但是问题是,要求用户在特定目录下运行代码,用户可能不清楚该文件夹是什么。您提供的代码更加健壮,因为它不依赖于当前目录。在我看来,最好不要依赖当前目录。在我看来,没有什么比看到有人在MATLAB中更改目录更糟糕的了,只是为了让他们能够访问自己的数据

因此,请记住
fullfile
的作用,我将在下面为您的代码添加注释

folder = fullfile('path', 'to', 'folder');
存储数据所在的路径。这可以是绝对路径(如您在问题中所述)
'/Users/blah/data'
,也可以是相对于当前目录
'data'
的路径,如果您的数据位于
完整文件(pwd,'data')
。前者是我比较喜欢的方法

f = dir(fullfile(folder, '*.asc'));
这将调用
dir
查找该文件夹中扩展名为
.asc
的所有文件/文件夹

name = fullfile(folder, f(ii).name);
这一行构造了感兴趣的文件的绝对路径,因为
dir
只返回文件名,而不是它所在的文件夹(我最大的烦恼之一)

显然,这将使用提供的完整路径读取实际文件

同样,这里真正的好处是您不必在特定的目录中执行此代码

既然您已经了解了所有这些,那么直接回答您的问题。如果数据位于当前目录中,则可以将
文件夹设置为当前目录

folder = pwd;
或者,如果您希望善待他人和未来的自己,您可以指定一个绝对路径(最好作为函数参数传递,而不是硬编码)


好的,如果我只做replace folder=fullfile('path','to','folder');使用folder=pwd,这就解决了我的目录混乱问题。但是现在我如何确认(通过显示?)此代码实际上只按预期保存了前80行?谢谢@Svet我建议您阅读整个答案,这样您就可以理解为什么简单地设置
folder=pwd
可能是个坏主意。@Svet到前80行,这就是这一行所做的
矩阵。(f(ii).name)=O(1:80,:)。您可以自己尝试验证。好的,是的,在这里使用folder=fullfile('Users',…'MATLAB')是最好的选择,假设我不会为这个特定例程将数据移出该文件夹。现在为什么在我运行这个例程时,它会给我一个无效的字段名:“filename.asc”错误?如果我删除了那个文件,它会转到文件夹中的下一个文件并说同样的话,所以这不是一个文件错误。我在这个例程中尝试使用的所有ascii文件似乎都有错误@Svet yes此函数不实际验证这些文件是否有效。它假设所有.asc文件都是有效的。如果MATLAB目录中有数据,则可以使用
userpath
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'));