上限函数不适用于KDB中的拉丁-2字符

上限函数不适用于KDB中的拉丁-2字符,kdb,Kdb,我试图在包含非英语字符的列上运行upper:áőí q)t:([] nm: (`as;`$"áb")) q)t nm --- as áb q)update upper_nm: upper nm from t nm upper_nm ------------ as AS áb áB 我发现了一种使用python系统调用的解决方法,但比内置函数慢得多: q)upper_py: {`$ system "python -c \"print(\\\"",string[x],

我试图在包含非英语字符的列上运行
upper
:áőí

q)t:([] nm: (`as;`$"áb"))
q)t
nm 
---
as 
áb
q)update upper_nm: upper nm from t
nm  upper_nm
------------
as  AS      
áb áB     
我发现了一种使用python系统调用的解决方法,但比内置函数慢得多:

q)upper_py: {`$ system "python -c \"print(\\\"",string[x],"\\\".upper())\""}
q)update upper_nm: upper_py'[nm] from t
nm  upper_nm
------------
as  AS      
áb ÁB  

应该有一种更好、更快的方法来实现这一点。

我认为Q中没有任何内置的
upper
函数支持这样的字符

获得它的最干净的方法是,但这种方法有点麻烦

我将通过将字符串列表传递给python并将结果解析到Q-list来加快您的方法。这将阻止为每个字符串调用系统:

t: ([] nm: (`as;`$"áb"));
toPythonList: {"[",("," sv "'",'x,'"'"),"]"};
pythonUpper: {system "python -c \"print([x.upper() for x in ",x,"])\""};
toQList: {-1_'1_'", " vs -1_1_x};
customUpper: {toQList first pythonUpper toPythonList x};
update upper_nm: customUpper string nm from t

谢谢你的建议。不幸的是,我的表有几十万行,因此一次系统调用会因数据量过大而失败。我用这个函数解决了:
aughous_-upper:{[w]ssr[;“á”;“Á”]ssr[;“í”;“Í”]ssr[;“ó”;“Ó”]ssr[;“ő”;“Ő”]ssr[;“ú”;“Ú”]ssr[;“ü”;“Ü”]ssr[;“ű”;“w”;“w-upper-grack”;“好主意”。正如您所知道的“特殊字符”映射,我建议您这样做:
更新nmu:{x^'(“aceíóóö337;úű”!“ÁÍÓÚࢠ”)@/:x}来自t的上字符串nm
而不是多个
ssr
s。应该更快,因为链式的
ssr
s将创建许多中间结构