JSA里的ffi(10)——用结构体读取日线数据
wils
创作者俱乐部成员
昨天王子陶大佬提醒我,通达信里的day日线文件,可以用ffi里的结构体来读取
今天wps更新了,正好尝试一下
不过,先吐槽一下,卸载再更新wps23542版本之后,加载项被奇怪的删除了,jsaddons里有些文件还存在,比如index.html,有些被删除了比如ribbon.xml,需要重新安装一下,另外,jsa里小写的这个期待很久的ffi暂时没有自动补全。。。
让人很满意又不是那么满意,哈哈
function bb()
{
const a = FileSystem.ReadFileAsArrayBuffer(`${ThisWorkbook.Path}\\sh600050.day`)
const Day = ffi.Struct([
{ name: "date", type: "int32" },
{ name: "open", type: "int32" },
{ name: "high", type: "int32" },
{ name: "low", type: "int32" },
{ name: "close", type: "int32" },
{ name: "amount", type: "float" },
{ name: "vol", type: "int32" },
{ name: "x", type: "int32" },
])
const d = new Day()
const v = new Uint8Array(d)
v.set(a.subarray(a.byteLength - 32))
console.log(d.date, d.open, d.close, d.amount)
}首先,ReadFileAsArrayBuffer读出来的文件是Uint8Array,而非ArrayBuffer
然后,用ffi.Struct定义结构体,它的实例就是一个ArrayBuffer
所以,Uint8Array的参数可以是一个结构体,创建一个view
之后,向view写入文件里的日线数据,就可以读取结构体的各个属性了
相比之前的写法,结构体确实方便多了,但不确定是否是最简单最方便的写法,希望更多朋友来尝试,希望大佬指正给出更方便的写法,谢谢啦
创作者俱乐部成员