Не можете получить содержимое записанного файла в q? - PullRequest
0 голосов
/ 12 сентября 2018

Я скопировал точный пример в 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 голосов
/ 12 сентября 2018

После тестирования данного кода я считаю, что ваша проблема может заключаться в том, как вы инициализируете файл.Я предполагаю, что в коде, который работает, вы использовали какой-то вариант

 `: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.То есть, 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

Это будет работать, только если все записи одного типа.

...