Matlab 在倍频程中打开函数文件的本地文件

Matlab 在倍频程中打开函数文件的本地文件,matlab,octave,filepath,Matlab,Octave,Filepath,我正试图让一个MATLAB项目在倍频程下工作。项目的布局如下所示: /myproject/funcs/f1.m /data.csv /examples/test.m 我想运行例程test.m,它利用函数f1。在f1.m中,有一个打开数据文件的调用: [...] data = dlmread('data.csv'); % Read the csv file [...] 当我在examples目录中时,此操作失败: error: dlmread

我正试图让一个MATLAB项目在倍频程下工作。项目的布局如下所示:

/myproject/funcs/f1.m
                /data.csv
          /examples/test.m
我想运行例程
test.m
,它利用函数
f1
。在
f1.m
中,有一个打开数据文件的调用:

[...]
data = dlmread('data.csv'); % Read the csv file
[...]
当我在
examples
目录中时,此操作失败:

error: dlmread: unable to open file 'data.csv'
所以我想我要寻找的是告诉Octave文件
data.csv
与试图打开它的函数定义位于同一目录中的某种方法。这个解决方案应该是MATLAB兼容的,所以我可以贡献必要的修改,使其在倍频程下工作回到项目中

我已经尝试过的:

  • data=dlmread('./data.csv')
    ->
    与以前相同的错误

  • 我没有八度音程,但是在Matlab中,如果通过
    addpath
    myproject/funcs
    添加到路径中,那么如果Matlab的当前路径是
    myproject/examples/
    ,那么
    dlmread('data.csv')
    可以工作。也就是说,在Matlab中,
    dlmread
    似乎在其路径中的所有条目中搜索单个文件。(请注意,
    dlmread('./data.csv')
    不起作用。对于
    dlmread
    要搜索Matlab路径,文件字符串似乎需要是裸文件。)您可以使用
    pwd
    打印当前工作目录。我建议使用addpath添加“funcs”目录,并使用相对文件名打开数据。例如,在test.m use
    dlmread(“../funcs/data.csv”)
    @Andy中,正如我所写,dlmread是从funcs目录中的文件调用的,因此您的注释对我没有帮助,很遗憾。@andreas-h:您写的是从eaxmples目录而不是从funcs中调用f1。f1的脚本存储在哪里并不重要,所有具有相对路径的操作都来自
    pwd
    。您可以进行恶意攻击,并在f1中使用
    mfilename(“fullpath”)
    fileparts
    。请务必获取data.csv的绝对文件名。但我会认为这是一个不好的做法,你应该像前一篇文章中所写的那样,给亲戚们一个路径。“谢谢,我会看<代码> MFrimeNe>代码>和<代码>文件部分。我知道这是一个丑陋和肮脏的黑客。但是这个项目在同一个文件夹
    funcs
    中有数据文件和读取这些数据的函数,它们
    dlmread
    是从
    f1
    调用的。如果我按照您的建议在
    f1
    中使用相对路径,那么整个过程只有在从
    examples
    文件夹调用时才能工作,而不是从
    examples/specialexamples
    调用。当然,最简单的方法是使用一个配置文件来指定数据目录的绝对路径,但这太大了,现在无法将其引入到项目中。我没有倍频程,但在Matlab中,如果通过
    addpath
    myproject/funcs
    添加到路径中,然后,如果Matlab的当前路径是
    myproject/examples/
    ,那么
    dlmread('data.csv')
    可以工作。也就是说,在Matlab中,
    dlmread
    似乎在其路径中的所有条目中搜索单个文件。(请注意,
    dlmread('./data.csv')
    不起作用。对于
    dlmread
    要搜索Matlab路径,文件字符串似乎需要是裸文件。)您可以使用
    pwd
    打印当前工作目录。我建议使用addpath添加“funcs”目录,并使用相对文件名打开数据。例如,在test.m use
    dlmread(“../funcs/data.csv”)
    @Andy中,正如我所写,dlmread是从funcs目录中的文件调用的,因此您的注释对我没有帮助,很遗憾。@andreas-h:您写的是从eaxmples目录而不是从funcs中调用f1。f1的脚本存储在哪里并不重要,所有具有相对路径的操作都来自
    pwd
    。您可以进行恶意攻击,并在f1中使用
    mfilename(“fullpath”)
    fileparts
    。请务必获取data.csv的绝对文件名。但我会认为这是一个不好的做法,你应该像前一篇文章中所写的那样,给亲戚们一个路径。“谢谢,我会看<代码> MFrimeNe>代码>和<代码>文件部分。我知道这是一个丑陋和肮脏的黑客。但是这个项目在同一个文件夹
    funcs
    中有数据文件和读取这些数据的函数,它们
    dlmread
    是从
    f1
    调用的。如果我按照您的建议在
    f1
    中使用相对路径,那么整个过程只有在从
    examples
    文件夹调用时才能工作,而不是从
    examples/specialexamples
    调用。当然,干净的方法是使用一个配置文件来指定数据目录的绝对路径,但这是一个太大的更改,现在无法引入到项目中。