Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String kdb/q:如何将字符串操作函数应用于字符串向量以输出字符串向量?_String_Function_Vectorization_Kdb - Fatal编程技术网

String kdb/q:如何将字符串操作函数应用于字符串向量以输出字符串向量?

String kdb/q:如何将字符串操作函数应用于字符串向量以输出字符串向量?,string,function,vectorization,kdb,String,Function,Vectorization,Kdb,提前谢谢你的帮助。我是KDB/Q的新手,来自Python和C++背景。 只是一个简单的语法问题:我有一个带有字段及其对应值的字符串 pp_str: "field_1:abc field_2:xyz field_3:kdb" 我编写了一个原子(标量)函数来提取给定字段的值 get_field_value: {[field; pp_str] pp_fields: " " vs pp_str; pid_field: pp_fields[where like[

提前谢谢你的帮助。我是KDB/Q的新手,来自Python和C++背景。 只是一个简单的语法问题:我有一个带有字段及其对应值的字符串

pp_str: "field_1:abc field_2:xyz field_3:kdb"
我编写了一个原子(标量)函数来提取给定字段的值

get_field_value: {[field; pp_str] pp_fields: " " vs pp_str; pid_field:  pp_fields[where like[pp_fields; field,":*"]]; start_i: (pid_field[0] ss ":")[0] + 1; end_i: count pid_field[0]; indices: start_i + til (end_i - start_i); pid_field[0][indices]}

show get_field_value["field_1"; pp_str]
"abc"

show get_field_value["field_3"; pp_str]
"kdb"
现在我如何推广它,如果我输入一个域向量,我得到一个值向量?我想输入(“字段1”;“字段2”;“字段3”)并输出(“abc”;“xyz”;“kdb”)。我尝试了多种方法(如下所示),但我对kdb/q的语法理解不够好,无法将我的函数矢量化:

/ Attempt 1 - Fail
get_field_value[enlist ("field_1"; "field_2"); pp_str]

/ Attempt 2 - Fail
get_field_value[; pp_str] /. enlist ("field_1"; "field_3")

/ Attempt 3 - Fail
fields: ("field_1"; "field_2")
get_field_value[fields; pp_str]

要为每个变量运行函数,您可以投影pp_str变量,并对其他变量使用
每个

q)get_field_value[;pp_str]each("field_1";"field_3")
"abc"
"kdb"
Kdb实际上具有处理此问题的内置功能:


我想这可能就是你想要的语法

q)get_field_value[; pp_str]each("field_1";"field_2")
"abc"
"xyz"

后续问题:但现在我如何为文本文件中的每一行(q4中的3个字符串中的每一个)执行此操作?在Python或C++逻辑中,基本上我想做一个嵌套for循环,外部循环遍历每个字符串,然后在每个字符串中,内循环捕获每个键(字段)的值:/尝试1 -失败GETXFieldYOLL值[每个字段;每个Q4] /尝试2 -每个[GETXieldFieldVal[[,Q4] ]失败。字段/尝试3-无法获取字段值[;每个q4]每个字段如何执行此操作?谢谢一般的方法是将
pp_str
设为变量,比如
x
,然后将其封装在lambda中并应用于每个字符串。类似于
{{@[;x](!/)”S:“0:y}[`field_1`field_3;x]}的内容,每个q4
。这是假设您希望为每个字符串提取相同的字段
q)get_field_value[; pp_str]each("field_1";"field_2")
"abc"
"xyz"