ahk:如何读取非txt文件并将信息保存到变量?

时间:2015-11-15 13:32:08

标签: autohotkey

我有一个游戏(坦克世界)的重播文件,我想从中读取信息并将它们存储到变量中。

当我用记事本打开文件时,似乎有一些xml“代码”女巫包含我想要的一些信息,然后开始重播文件数据,所以它只是乱码。例如:http://pastebin.com/faBPUn1d

我试图用FileReadLine提取第一行,但变量只包含废话:(

我怎么能用ahk读取文件,存储信息如“damageDealt”:9321到变量? 谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

这是二进制文件中的JSON数据,因此请使用FileOpen函数打开它。

有两个JSON块,每个块都以其长度(NumGetFile.ReadUInt或类似于救援)为前缀,因此您可以使用它来提取块并将其传递给{{3} }。

然后您将能够分层访问对象或像任何对象一样枚举它:
result.personal["14337"].details["(9291360, 7169)"].damageDealt

示例:

#include JSON.ahk ; download from https://github.com/cocobelgica/AutoHotkey-JSON

; read the data
f := fileOpen("14473423299267_usa_A02_M2_lt_thepit.wotreplay", "r")
f.seek(8)
data1 := JSON.load(f.read(f.readUInt()))
data2 := JSON.load(f.read(f.readUInt()))
f.close()

; write the data as pretty-formatted JSON
f := fileOpen("data1.json", "w"), f.write(JSON.dump(data1,,"`t")), f.close()
f := fileOpen("data2.json", "w"), f.write(JSON.dump(data2,,"`t")), f.close()

; load the first item of 'data2[1].personal' object into personalInfo
data2[1].personal._NewEnum().Next(k, personalInfo)

msgbox % "playerName: " data1.playerName "`n"
       . "dateTime: " data1.dateTime "`n"
       . "mapName: " data1.mapName "`n"
       . "`n"
       . "damageDealt: " personalInfo.damageDealt "`n"