Kdb Can';无法在q中获取书面文件内容?

Kdb Can';无法在q中获取书面文件内容?,kdb,Kdb,我在q中复制了凡人的确切例子,如下所示: q)h:hopen `:D:/q4m/raw q)h[42] 548i q)h 10 20 30 548i q)hclose h q)get `:D:/q4m/raw 'D:/q4m/raw [0] get `:D:/q4m/raw 查看目录,文件是在那里创建的。为什么我不能得到它 相反,如果我这样做: q)h:hopen `:D:/q4m/L q)h[42] 628i q)h[10 20 30] 628i q)hclose h q)get `:

我在
q中复制了凡人的确切例子,如下所示:

q)h:hopen `:D:/q4m/raw
q)h[42]
548i
q)h 10 20 30
548i
q)hclose h
q)get `:D:/q4m/raw
'D:/q4m/raw
  [0]  get `:D:/q4m/raw
查看目录,文件是在那里创建的。为什么我不能
得到它

相反,如果我这样做:

q)h:hopen `:D:/q4m/L
q)h[42]
628i
q)h[10 20 30]
628i
q)hclose h
q)get `:D:/q4m/L
0 1 2 3 4 42 10 20 30

事情变得正常了,为什么?

在测试了给定的代码之后,我相信您的问题可能在于如何初始化文件。 我假设在有效的代码中,您使用了

 `:D:/q4m/L set til 5
以前。 然而,这并不是为了

 `:D:/q4m/raw
如果你要用

 `:D:/q4m/raw set til 5
或者

.[`:D:/q4m/raw;();:;()]
在此之前,第一组代码将工作

另外,如果我们使用

read1 `:D:/q4m/raw

并且输出在开头附近不包含07,因此未将其识别为适当的kdb列表。也就是说,hopen只是附加到二进制文件,而不是修改它。(如果注意到表示列表长度的05字节,则通过句柄添加时不会增加)。 如。 你得到的第一种方法

q)read1  `:D:/q4m/raw
0x2a000000000000000a0000000000000014000000000000001e00000000000000
这在q中并没有任何意义。 第二种方法给出

q)read1 `:D:/q4m/L
0xfe2007000000000005000000000000000000000000000000010000000000000002000000000..
这是一个合适的kdb列表(请注意表示类型的07)

如果您只想读入/q4m/raw,那么我建议设置一个空列表,然后转到该列表并按如下方式传递它`:D:/q4m/raw

q)`:empty set 0#0
`:empty
q)h:hopen `:empty
q)h read1 `:D:/q4m/raw
3i
q)get `:empty
42 10 20 30

只有在所有条目都是相同类型的情况下,这才有效。

您的解释很好,但如果我想获取原始内容,请选择任何方法。
q)`:empty set 0#0
`:empty
q)h:hopen `:empty
q)h read1 `:D:/q4m/raw
3i
q)get `:empty
42 10 20 30