我有一些代码可以解析pcap文件并将解析后的数据写入数组data = []
,然后将该数据写入JSON文件:
var fs = require("fs");
var pcapp = require('pcap-parser');
var hex = "";
var data = [];
var i = 0;
function hex2a(hexx) {
var hex = hexx.toString();//force conversion
var str = '';
for (var i = 0; i < hex.length; i += 2)
str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
return str;
}
var parser = pcapp.parse('C:/Users/Brandt Winkler Prins/Desktop/data.pcap');
parser.on('packet', function(packet) {
hex = [...packet.data].map(_ => ('0' +_.toString(16)).slice(-2)).join();
var ticker = hex2a(hex.substring(282, 306).replace(/,/g,""));
var bidPrice = parseInt(hex.substring(318,342).split(",").reverse().join(""), 16);
var timestamp = parseInt(hex.substring(258, 282).split(",").reverse().join(""), 16);
if(packet.header.capturedLength == 126 && ticker == "AAPL ") {
data[2*i] = bidPrice;
data[2*i-1] = timestamp;
i++
}
});
data = JSON.stringify(data);
fs.writeFile("C:/Users/Brandt Winkler Prins/Desktop/Project/data.json",data);
所有数据都写入parser.on(...)
中的相应数组,但node.js在执行.writeFile
之前执行parser.on(...)
命令。总而言之,我的问题是:如何在编写文件之前强制节点执行我的代码?
非常感谢任何帮助。
答案 0 :(得分:1)
您的解析器将从文件中一次读取一个数据包,并为每个数据包引发on()
方法。
在写入文件之前,您如何知道已达到数据包的数量?
你可以这样做:
制作一个简单的方法,例如您在check_finished_and_save()
末尾添加的on()
,它控制着没有更多数据可供阅读。如果是,则写入文件。
您只需将结果附加到您的文件(a
的模式append
)即可。每次调用on()
时,都会将结果附加到文件的末尾。
答案 1 :(得分:1)
捕获解析器的结束事件,并执行stringify和写入文件操作等内容
parser.on('end', function (session) {
data = JSON.stringify(data);
fs.writeFile("C:/Users/Brandt Winkler Prins/Desktop/Project/data.json",data);
});
答案 2 :(得分:1)
完成解析后需要写入文件
parser.on('end', function(){
data = JSON.stringify(data);
fs.writeFile("C:/Users/Brandt Winkler Prins/Desktop/Project/data.json",data);
});