kdb:检查符号是否以特定前缀开头

kdb: check whether a symbol starts with a particular prefix

给定一个符号,如何检查它是否有特定的前缀?

我有以下代码。它检查符号是否以 aaaaa 开头,但 returns 1b 是否以 aaa 开头,这是错误的。我可以添加一个长度检查,但这看起来很冗长。有更清洁的方法吗?

{"aaaaa"~-5#string x}[`$"aaa"]

你可以使用 like 吗?

q)`aaa like "aaa*"
1b 
q)`aaa like "aaaaa*"
0b

似乎问题出在“take”上,因为“aaa”比 5 短。为了满足该长度,它会将“aaa”本身延长 2/3。

您可以修改您的函数,使您拥有以下内容:

q){"aaaaa"~(x) til 5}["aaa"]
0b
q){"aaaaa"~(x) til 5}["aaaaaaaa"]
1b

扩展 Matthew 的答案,如果你想从中创建一个函数,请执行以下操作:

q)f:{x like "aaaaa*"}
q)f[`aaa]
0b
q)f[`aaaaa]
1b
q)f[`aaaaabcde]
1b

如果你想让它更动态,你可以为匹配前缀添加第二个变量。

q)f2[`aaa;"aaa"]
1b
q)f2:{x like y,"*"}
q)f2[`aaa;"aaaaa"]
0b
q)f2[`aaa;"aaa"]
1b

如果您发现任何问题,请告诉我。