如何在 kdb 中加载以 " 作为分隔符的 CSV 文件?

How can I load a CSV file with " as the delimiter in kdb?

如何加载带有 " 分隔符的 CSV 文件?见第二行。 dd 加载到 symbolCol,而不是 stringCol

$cat kdb.log
longCol"floatCol"symbolCol"stringCol
1"4"b"bb
2"5""dd

我正在使用

加载
tab:("JFSS";enlist "\"") 0: `$"/home/..../kdb.log"

dd 加载在 symbolCol 中,而不是 stringCol

q)tab
longCol floatCol symbolCol stringCol
------------------------------------
1       4        b         bb      
2       5        dd                
q)tab[`symbolCol]
`b`dd

这实际上看起来可能是解析器中的错误 - 值得向 Kx 团队提出。使用 " 作为分隔符是非常罕见的,所以他们可能没有考虑到它。

我能找到的唯一解决方法是用更好的分隔符替换 "。理想情况下,您应该在 kdb 之外更改定界符,但如果您必须在 kdb 中进行更改,您可以这样做:

q)("JFSS";enlist",") 0: ssr[;"\"";","]each read0`$":/home/..../kdb.log"
longCol floatCol symbolCol stringCol
------------------------------------
1       4        b         bb
2       5                  dd
q)

使用永远不会出现在文件中的分隔符。

kdb 支持建议此代码。 kdb+ 使用双引号来检测和忽略文件中嵌入的定界符。因此,我们可以按如下方式解析 csv 文件,而不是使用 0:。

split:"\"" vs' read0 `$":/tmp/kdb.log"; 
headers:`$split[0];   
tab:flip headers!"JFS*"$flip 1_split;