KDB 由固定分隔符分割

KDB split by fixed delimiter

我有一列 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"/>

我正在尝试按列拆分

TE, ST, TT

数据类型为C

对kdb/q不是很熟悉我尝试过非常手动的方式。首先去掉开始和结束标签

x:update `$ssr[;"<Options";""] each tags from x
x:update `$ssr[;"/>";""] each string tags from x

给我留下像

这样的行
TE="2017/09/01, 16:45:00.000" ST="2017/09/01, 09:00:00.000" TT="2017/09/01, 16:45:00.000"

然后,拆分字符串

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

这里是我使用的 table 作为参考:

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\"/>"))

疯狂的想法:你的 XML 数据 正规的吗,所以可以 select "columns" 通过索引。如果是这样,假设数据(以上)在 3 元素字符串列表中,您是否不可能将某些函数 foo 应用于:

foo xmllist[;ind]

其中查找 select 所需的数据。函数 foo 将对时间戳数据类型进行必要的转换,方法是使用 (types;delimiter) 0: ... ?

看看是否可以将 XML 文件导出到 JSON 文件。 kdb+/q 有一个 json 解析器,它会为你做所有脏活累活。 .j.k.j.j.

参考:http://code.kx.com/q/cookbook/websockets/#json