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