无法在q中获取书面文件内容?

时间:2018-09-12 03:07:12

标签: kdb

我已在q for mortals中复制了确切的示例,如下所示:

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

查看目录,在该目录中创建文件。我为什么不能get

相反,如果我这样做:

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

一切正常,为什么?

1 个答案:

答案 0 :(得分:7)

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

 `:D:/q4m/L set til 5

之前。 但是,这并非针对

 `:D:/q4m/raw

如果要使用

 `:D:/q4m/raw set til 5

或者

.[`:D:/q4m/raw;();:;()]

之前,第一组代码将起作用。

另外,如果我们使用

read1 `:D:/q4m/raw

read1 `:D:/q4m/L

并且输出在开头附近不包含07,则它不被识别为正确的kdb列表。也就是说,希望只是将其附加到二进制文件中,而不是对其进行修改。 (如果您注意到指示列表长度的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

这仅在所有条目都是相同类型时才有效。