Параметризация сценария kdb q - PullRequest
0 голосов
/ 24 октября 2018

Я пишу сценарий kdb / q, который каким-то образом должен будет запрашивать ввод данных пользователем, а затем добавлять этот ввод в несколько предварительно отформатированных запросов.Предложения о том, как запросить / принять ввод и параметризовать запросы?

Ответы [ 4 ]

0 голосов
/ 24 октября 2018

Вы также можете передать входные данные в качестве аргументов командной строки, используя .z.x & .Q.opt:

$ q -item cam
q)p:.Q.opt .z.x
q)p`item
item| "cam"

q)select from tab where items=first `$p`item
items sales prices
------------------
cam   0     15
0 голосов
/ 24 октября 2018

Вы можете принять пользовательский ввод, используя read0 0, который будет ожидать все типы пользователей, пока они не нажмут ввод.Ввод будет возвращен в виде строки.Вы можете ввести это в активный сеанс q или обернуть его в функцию, подобную этой:

q)f:{a:read0 0;show a}
q)f[]
12
"12"

В этом случае я набрал 12, который возвращается в виде строки "12".

Что касается параметризации запросов, то это может быть сделано через строки, но это не очень, так сказать, q.Было бы лучше привести данные к другому типу и использовать функциональную форму или даже стандартные выборки, например:

q)tab:([]a:1 2 3 4)
q){input:"J"$read0 0;select from tab where a=input}[]
4
a
-
4

Подробнее о функциональной форме можно прочитать в вики Kx.

0 голосов
/ 24 октября 2018

Для пользовательского ввода вы можете использовать read0 для дескриптора файла 0 - стандартный ввод.Приглашение пользователя будет выводиться на стандартный вывод (дескриптор файла 1), например:

1 "Please give me some input: ";
input: read0 0;

Для параметризации запроса вы можете использовать либо конкатенацию строк функциональной формы запроса, как описано здесь (код.kx.com)

0 голосов
/ 24 октября 2018

Оформление заказа read0 для чтения входов с консоли.

q)rl:{1">> "; value "select from tab where items=`",read0 0}
q)rl`
>> cam
items sales prices
------------------
cam   0     15
...