将 csv 字符串转换为 csv 中的 table

Convert a csv string to a table in csv

如果我们有一个包含 csv 的文件,那么我们可以使用 0 读取它: 比如说,我们在磁盘上有一个文件 x.csv 然后将它转换为 table 很容易,如下所示

("SFJ";enlist",")0:`:/x.csv

但是,我们如何将 csv 字符串转换为 table?
字符串:

"sym,px,vol
GG,10.2,100
AA,11.2,1000"

预期输出:table

sym px  vol
"GG"    10.2    100
"AA"    11.2    1000

可以使用 0: 而不是文件句柄传入字符串,table 将正常创建:

q)s:("sym,px,vol";"GG,10.2,100";"AA,11.2,1000")
q)s
"sym,px,vol"
"GG,10.2,100"
"AA,11.2,1000"
q)("SFJ";enlist",")0:s
sym px   vol
-------------
GG  10.2 100
AA  11.2 1000

如果您需要以编程方式从一个大字符串 csv 获取 Eliot 的 s,根据 csv 字符串的格式,有几个选项。

// \n delimited 
s:` vs "sym,px,vol\nGG,10.2,100\nAA,11.2,1000"

// if you know the row and col count. 
s:3 3#"," vs "sym,px,vol,GG,10.2,100,AA,11.2,1000"

// if you just know the col count
s:"sym,px,vol,GG,10.2,100,AA,11.2,1000"
f:{[str;noCol]
    str:"," vs str;   
    noRow:`long$(count str)%noCol;
    (noRow, noCol)#str
}
f[s;3] 

三个都输出这个("sym,px,vol";"GG,10.2,100";"AA,11.2,1000")