按固定分隔符分割的KDB

按固定分隔符分割的KDB,kdb,Kdb,我有一个包含xmls的专栏 <Options TE="2017/09/01, 16:45:00.000" ST="2017/09/01, 09:00:00.000" TT="2017/09/01, 16:45:00.000"/> <Options TE="2017/09/01, 16:45:00.000" ST="2017/09/01, 09:00:00.000" TT="2017/09/01, 16:45:00.000"/> <Options TE="2017/0

我有一个包含xmls的专栏

<Options TE="2017/09/01, 16:45:00.000" ST="2017/09/01, 09:00:00.000" TT="2017/09/01, 16:45:00.000"/>
<Options TE="2017/09/01, 16:45:00.000" ST="2017/09/01, 09:00:00.000" TT="2017/09/01, 16:45:00.000"/>
<Options TE="2017/09/04, 16:45:00.000" ST="2017/09/04, 09:00:00.000" TT="2017/09/04, 16:45:00.000"/>
数据的类型是C

我对kdb/q不太熟悉,所以我试着采用非常手动的方式。首先删除开始和结束标记

x:update `$ssr[;"<Options";""] each tags from x
x:update `$ssr[;"/>";""] each string tags from x
然后,拆分字符串

select `$"\"" vs' string tags from  x

给我一个列表,其中奇数项是我的时间。我就是想不出如何将列表拆分成单独的列。有什么想法吗?

我采取了一种稍微不同的方法,但以下内容应该可以满足您的需要:

//Clean the tags up for separation
//(get rid of open/close tags, change ", " to "," for ease of parsing and remove quote marks) 
x:update tags:{ssr/[x;("<Options ";"/>";", ";"\"");("";"";",";"")]} each tags from x


//Parse the various tags using 0:, put the result into a dictionary,
//exec out to table form and add to x
x:x,'exec (!) ./: ("S= " 0:/: tags) from x
//清理标记以进行分离
//(去掉打开/关闭标记,将“,”改为“,”,以便于解析和删除引号)
x:更新标记:{ssr/[x;(“;”,“;“\”);(“;”;”,“;”)]}来自x的每个标记
//使用0:解析各种标记,将结果放入字典,
//exec输出到表格表单并添加到x
x:x,'exec(!)./:(“S=”0:/:标记)来自x
以下是我使用的表格供参考:

x:([] tags:("<Options TE=\"2017/09/01, 16:45:00.000\" ST=\"2017/09/01, 09:00:00.000\" TT=\"2017/09/01, 16:45:00.000\"/>";
"<Options TE=\"2017/09/01, 16:45:00.000\" ST=\"2017/09/01, 09:00:00.000\" TT=\"2017/09/01, 16:45:00.000\"/>";
"<Options TE=\"2017/09/04, 16:45:00.000\" ST=\"2017/09/04, 09:00:00.000\" TT=\"2017/09/04, 16:45:00.000\"/>"))
x:([]标记:(“”);
"";
""))

疯狂思考:您的XML数据是否具有常规外观,以便可以通过索引选择“列”。如果是这样,假设数据(以上)位于字符串的三元素列表中,您是否可以将某些函数foo应用于:

foo xmllist[;ind]

其中ind选择所需的数据。函数foo将通过使用(类型;分隔符)0:…?

对时间戳数据类型进行必要的转换,查看是否可以将XML文件导出为JSON文件。 kdb+/q有一个json解析器,它可以为您完成所有繁琐的工作。
.j.k
.j.j


参考资料:

非常感谢。这很管用。但我不知道是怎么做的。这部分是怎么剩下的。/:管用的?1.
(“S=”0:/:tags)
给出了一对列表,每一行看起来都是这样的:(
TE
ST
TT;(2017/09/01,16:45:00.000;2017/09/01,09:00.000;2017/09/01,09:00.000);2017/09/01,16:45:00.000)
2.(!)./:将上述内容更改为表中每一行的字典。对于上面的示例行,字典如下所示:
TE
ST
TT!2017/09/01,16:45:00.0002017/09/01,09:00:00.0002017/09/01,16:45:00.000
3。
exec
将从表中提取字典列表。生成的列表本身就是一个未命名的列表table since(字典表列表)4.
x'
将结果表以行级别a连接在一起,非常感谢。Q有时看起来并不比rosetta stone更神秘
x:([] tags:("<Options TE=\"2017/09/01, 16:45:00.000\" ST=\"2017/09/01, 09:00:00.000\" TT=\"2017/09/01, 16:45:00.000\"/>";
"<Options TE=\"2017/09/01, 16:45:00.000\" ST=\"2017/09/01, 09:00:00.000\" TT=\"2017/09/01, 16:45:00.000\"/>";
"<Options TE=\"2017/09/04, 16:45:00.000\" ST=\"2017/09/04, 09:00:00.000\" TT=\"2017/09/04, 16:45:00.000\"/>"))
foo xmllist[;ind]