在 kdb 中将字符串转换为 long

Cast string to long in kdb

我想先将一个字符串分解为字符串列表,然后根据条件我想 return 列表中的一个项目一样长。

Func:{[x]
  Temp:vs "-" x;
  if["AAA" ~  Temp[0];:"J"$Temp[1];:"J"$Temp[2]]
 }

 Func["AAA-809-AXSDF"]

此函数 returns 809 但当我这样做时:

 809 ~ Func["AAA-809-AXSDF"]

它returns 0b

这意味着它不会将列表项转换为长列表项。请推荐

如果我的逻辑正确,下面的代码可以解决问题:

{x: "-"vs x; "J"$ $["AAA"~x 0;x 1; x 2]}"AAA-809-AXSDF"

您的代码中存在一些错误:

1: [x] 没有必要

2: vs "-" x 应该是 "-" vs x

3:if["AAA" ~ Temp[0];:"J"$Temp[1];:"J"$Temp[2]]这条语句if true always returns :"J"$Temp[1]:"J"$Temp[2]永远不会执行。我想你需要的是条件 $ operator

q)func:{"J"$ $["AAA"~first a:"-"vs x;a 1;a 2]}
q)809~func["AAA-809-AXSDF"]
1b
q)111~func["AAB-AXSDF-111"]
1b