参数化 kdb q 脚本
Parameterizing a kdb q script
我正在编写一个 kdb/q 脚本,它必须以某种方式提示用户输入,然后将该输入添加到几个其他预格式化的查询中。关于如何 prompt/accept 输入和参数化查询的建议?
签出 read0
以从控制台读取输入。
q)rl:{1">> "; value "select from tab where items=`",read0 0}
q)rl`
>> cam
items sales prices
------------------
cam 0 15
您可以使用 read0 0
接受用户输入,等待将捕获所有用户类型,直到他们按下回车键。然后输入将作为字符串返回。您可以将其输入到活动的 q 会话中,也可以将其包装在这样的函数中:
q)f:{a:read0 0;show a}
q)f[]
12
"12"
在这种情况下,我输入了 12
,它作为字符串 "12"
.
返回
至于参数化查询,这可以通过字符串来完成,但可以这么说,这不是很好。您最好将输入转换为另一种类型并使用函数形式甚至标准选择,例如:
q)tab:([]a:1 2 3 4)
q){input:"J"$read0 0;select from tab where a=input}[]
4
a
-
4
您可以在 Kx wiki 上阅读有关 functional form 的更多信息。
对于用户输入,您可以在文件句柄 0
上使用 read0
- 标准输入。用户提示将打印到标准输出(文件描述符 1
),如下所示:
1 "Please give me some input: ";
input: read0 0;
对于查询参数化,您可以按照 here (code.kx.com)
所述的功能查询形式的字符串连接
您也可以将输入作为命令行参数传递,使用 .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
我正在编写一个 kdb/q 脚本,它必须以某种方式提示用户输入,然后将该输入添加到几个其他预格式化的查询中。关于如何 prompt/accept 输入和参数化查询的建议?
签出 read0
以从控制台读取输入。
q)rl:{1">> "; value "select from tab where items=`",read0 0}
q)rl`
>> cam
items sales prices
------------------
cam 0 15
您可以使用 read0 0
接受用户输入,等待将捕获所有用户类型,直到他们按下回车键。然后输入将作为字符串返回。您可以将其输入到活动的 q 会话中,也可以将其包装在这样的函数中:
q)f:{a:read0 0;show a}
q)f[]
12
"12"
在这种情况下,我输入了 12
,它作为字符串 "12"
.
至于参数化查询,这可以通过字符串来完成,但可以这么说,这不是很好。您最好将输入转换为另一种类型并使用函数形式甚至标准选择,例如:
q)tab:([]a:1 2 3 4)
q){input:"J"$read0 0;select from tab where a=input}[]
4
a
-
4
您可以在 Kx wiki 上阅读有关 functional form 的更多信息。
对于用户输入,您可以在文件句柄 0
上使用 read0
- 标准输入。用户提示将打印到标准输出(文件描述符 1
),如下所示:
1 "Please give me some input: ";
input: read0 0;
对于查询参数化,您可以按照 here (code.kx.com)
所述的功能查询形式的字符串连接您也可以将输入作为命令行参数传递,使用 .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