Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.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
Kdb 相对于当前脚本而不是相对于工作目录加载q文件_Kdb - Fatal编程技术网

Kdb 相对于当前脚本而不是相对于工作目录加载q文件

Kdb 相对于当前脚本而不是相对于工作目录加载q文件,kdb,Kdb,我想加载一个与我当前所在的源文件相关的q脚本,无论q进程启动时我在哪里 例如,我有一个项目: - myproject/ a.q b.q 在a.q中,我有以下几行: ... system"l b.q"; ... 我的问题是,这只在我将cd刻录到myproject/时起作用,因此b.q位于当前工作目录中 我希望能够从a.q加载b.q,而不必使用绝对路径,无论从何处启动脚本 例如,在python中,我可以使用os.path.realpath来实现这一点。实现这一

我想加载一个与我当前所在的源文件相关的q脚本,无论q进程启动时我在哪里

例如,我有一个项目:

- myproject/
    a.q
    b.q
在a.q中,我有以下几行:

...
system"l b.q";
...
我的问题是,这只在我将cd刻录到myproject/时起作用,因此b.q位于当前工作目录中

我希望能够从a.q加载b.q,而不必使用绝对路径,无论从何处启动脚本


例如,在python中,我可以使用os.path.realpath来实现这一点。实现这一点的一种方法是使用环境变量。您可以在bash中使用export命令启动q会话之前设置这些。这里有一个简单的例子:

$ export TABLE=/home/mclark/tab.q
$ q

q)getenv[`TABLE]
"/home/mclark/tab.q"
这样就保存了文件的绝对路径,您可以以类似的方式加载脚本

如果不想使用环境变量,可以开始使用.z.o和.z.f。下面是一个快速示例,其中我正在加载一个包含字典dict的文件:


.z.f将打印在启动q进程时传入的q脚本的名称,因此在上述示例中为`path/a.q。希望这样的函数能在这方面给您带来更多的灵活性。

实现这一点的一种方法是使用环境变量。您可以在bash中使用export命令启动q会话之前设置这些。这里有一个简单的例子:

$ export TABLE=/home/mclark/tab.q
$ q

q)getenv[`TABLE]
"/home/mclark/tab.q"
这样就保存了文件的绝对路径,您可以以类似的方式加载脚本

如果不想使用环境变量,可以开始使用.z.o和.z.f。下面是一个快速示例,其中我正在加载一个包含字典dict的文件:


.z.f将打印在启动q进程时传入的q脚本的名称,因此在上述示例中为`path/a.q。希望这样的函数可以在这方面给您带来更多的灵活性。

您可以使用Charlie Skelton在k4列表框中提出的这个小技巧来实现:

thisFile:hsym`$(reverse value {})2;
thisPath:first` vs thisFile;
otherFile:` sv thisPath,`other.q;

一些注意事项-只有当代码作为脚本的一部分运行时,它才起作用,也就是说,如果您在会话或IDE中手动运行这些行,它就不起作用。第二个警告是,如果您使用\ \来扰乱您的q脚本,那么它将不起作用。第三个警告是,值的输出可能会在kdb版本之间发生变化

您可以使用Charlie Skelton在k4列表框中提出的这一技巧来实现:

thisFile:hsym`$(reverse value {})2;
thisPath:first` vs thisFile;
otherFile:` sv thisPath,`other.q;

一些注意事项-只有当代码作为脚本的一部分运行时,它才起作用,也就是说,如果您在会话或IDE中手动运行这些行,它就不起作用。第二个警告是,如果您使用\ \来扰乱您的q脚本,那么它将不起作用。第三个警告是,在您执行任何可能影响其的操作之前,a.q顶部kdb版本之间的值输出可能会发生变化:

startDir: ` sv (hsym `$system"cd";first ` vs .z.f);
这将为您提供一个指向a.q目录的完全限定路径,然后您可以使用该路径加载b.q:

system "l ", 1_ string ` sv (startDir;`b.q);

在a.q的顶端,在你做任何可能影响它的事情之前:

startDir: ` sv (hsym `$system"cd";first ` vs .z.f);
这将为您提供一个指向a.q目录的完全限定路径,然后您可以使用该路径加载b.q:

system "l ", 1_ string ` sv (startDir;`b.q);