Получение местоположения текущего файла в q (kdb) - PullRequest
0 голосов
/ 27 апреля 2018

Есть ли способ получить местоположение текущего запущенного файла в q аналогичным образом, как в Python __file__.

1 Ответ

0 голосов
/ 27 апреля 2018

http://code.kx.com/q/ref/dotz/#zf-file

Для этого вы можете использовать .z.f, он содержит имя файла, загруженного в командную строку. Не работает для файлов, загруженных с \l, хотя

jonny@grizzly ~ $ echo 'show .z.f' > a.q
jonny@grizzly ~ $ q a.q
KDB+ 3.5 2017.10.11 Copyright (C) 1993-2017 Kx Systems
l32/ 2()core 1945MB jonny grizzly 127.0.1.1 NONEXPIRE

`a.q
q)\\
jonny@grizzly ~ $ q
KDB+ 3.5 2017.10.11 Copyright (C) 1993-2017 Kx Systems
l32/ 2()core 1945MB jonny grizzly 127.0.1.1 NONEXPIRE

q)\l a.q
`
q)\\

Если вам нужно найти расположение функции, загруженной в скрипт с помощью \l, вы можете получить эту информацию из value .z.s в последних версиях kdb:

jonny@grizzly ~ $ echo 'b:{show value[.z.s]8}' > b.q
jonny@grizzly ~ $ echo 'c:{show value[.z.s]8}' > c.q
jonny@grizzly ~ $ q
KDB+ 3.5 2017.10.11 Copyright (C) 1993-2017 Kx Systems
l32/ 2()core 1945MB jonny grizzly 127.0.1.1 NONEXPIRE

q)\l b.q
q)\l c.q
q)b[]
"/home/jonny/b.q"
q)c[]
"/home/jonny/c.q"

Обратите внимание, что это поведение отличается в более старых версиях kdb. Для справки доступна дополнительная информация value .z.s:

jonny@grizzly ~ $ echo 'd:{show value[.z.s]}' > d.q
jonny@grizzly ~ $ q
KDB+ 3.5 2017.10.11 Copyright (C) 1993-2017 Kx Systems
l32/ 2()core 1945MB jonny grizzly 127.0.1.1 NONEXPIRE

q)\l d.q
q)d[]
0x7733a0520002
,`x
`symbol$()
,`
k){1 .Q.s x;}
12 6 1 1
"..d"
"/home/jonny/d.q"
1
"{show value[.z.s]}"

Подробнее см. http://code.kx.com/q/ref/metadata/#value

...