q
可以创建一个文件并以一种很好的方式读回它的内容:
q)`:foo 0: ("bar";"baz")
`:foo
q)`:foo 0::
"bar"
"baz"
https://code.kx.com/q/ref/read0/表示可以用来read0
从file or process handle
. 但由于某种原因,我无法从文件句柄中获取任何数据。之后看不到输出q)read0[h]
:
q)h:hopen `:foo
q)read0[h]
q)hclose h
此外,.Q.fsn
在每个步骤中,它使用 读取下一部分数据1:(s;x;n)
,但不是通过打开的句柄(就像在其他编程语言中一样):
k)fsn:{[f;s;n]
>[-7!s]
{[f;s;x;n]
i:(#r)^1 + last@&"\n"=r:1:(s;x;n);
f@`\:i#r;
x+i
}[f;s;;n]/0}
那么是否可以使用这种使用1:
or 0:
(read0
或0::
in q
)的方法通过文件名(符号)从文件中读取数据,而不是通过打开句柄来读取它们。为什么不能从打开的句柄中读取?但是通过文件句柄编写是可以的。
更新: 谢谢,@CallumBiggs!
伟大的!如果没有句柄,它看起来像一个实体且对称的 api,例如:
gen1day:{[date;n] ([]
sourcetime:`timestamp$date+asc 09:00:00.0 + n?08:00:00.0;
inst:n?(1000?`4); price:n?100f; size:n?10000;
e1:n?20; x:n?(`N`O`L`X); e2:n?10)
}
/memory, strings
("PSFJJSJ";enlist"|") 0: "|" 0: gen1day[2020.01.01;5]
/disk, `:t0 file
("PSFJJSJ";enlist"|") 0: read0 `:t0 0: "|" 0: gen1day[2020.01.01;5]