2017-08-08 93 views
1

執行代碼我有一些解析PCAP文件和解析的數據寫入到一個數組data = []然後代碼將這些數據寫入到一個文件JSON:Node.js的特定的順序

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(...)。總而言之,我的問題是:如何在寫入文件之前強制節點執行我的代碼?

任何幫助,非常感謝。

回答

1

你需要編寫整理分析

parser.on('end', function(){ 
    data = JSON.stringify(data); 
    fs.writeFile("C:/Users/Brandt Winkler Prins/Desktop/Project/data.json",data); 
}); 
+0

後提交只想說感謝並獲得評論員徽章 – BWP

1

解析器將一次從文件中讀取一個數據包,併爲每個數據包提出on()方法。

在寫入文件之前,您如何知道數據包的數量已經達到?

你可以這樣做:

  1. 做一個簡單的梅索德,就像您添加在你on()的結束和控制,有沒有更多的數據讀取check_finished_and_save()。如果是,則寫入文件。

  2. 你可以簡單地你的結果添加到您的文件(模式aappend)。每次調用on()時,都會將結果附加到文件末尾。

1

獲取結束事件解析器,做你的東西,如字符串化和寫文件操作

parser.on('end', function (session) { 
    data = JSON.stringify(data); 
    fs.writeFile("C:/Users/Brandt Winkler Prins/Desktop/Project/data.json",data); 
});