我有一个游戏(坦克世界)的重播文件,我想从中读取信息并将它们存储到变量中。
当我用记事本打开文件时,似乎有一些xml“代码”女巫包含我想要的一些信息,然后开始重播文件数据,所以它只是乱码。例如:http://pastebin.com/faBPUn1d
我试图用FileReadLine提取第一行,但变量只包含废话:(
我怎么能用ahk读取文件,存储信息如“damageDealt”:9321到变量? 谢谢你的帮助
答案 0 :(得分:0)
这是二进制文件中的JSON数据,因此请使用FileOpen函数打开它。
有两个JSON块,每个块都以其长度(NumGet
或File.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"