簡體   English   中英

使用轉換流解析文本文件時出現節點js錯誤

[英]Node js error when parsing a text file with transform stream

我需要在Node js服務器上解析一個文本文件。 文本文件由標題和項目列表組成,所有內容均位於單獨的行中。 我執行一個請求,然后將響應傳遞到解析器流。 我需要從標題中提取時間。 問題在於有時標頭變量會從文件中間附加一些信息。 如果我console.log它,它看起來像這樣:

HEADER
MIDDLE_OF_THE_FILE_STUFF

最奇怪的是,它不會一直發生。 只是有時。 並且每次將文件內容的中間位置從文件中的同一位置追加。 我嘗試做header.substring(0,len)但它只剪切標題本身,沒有MIDDLE_OF_THE_FILE_STUFF。

這是代碼:

parser._transform = function(chunk,encoding,done){
    var time = {};
    var data = chunk.toString();
    lines = data.split('\n');

    header = (lines[0]);

    var regEx = /[0-9][0-9]:[0-9][0-9]/;

    var m = regEx.exec(header);
    var splitTime = m[0].split(':');
    time = {
        hours:splitTime[0],
        minutes:splitTime[1]
    }
    console.log(time);
    var pushjson = JSON.stringify(time, null, 2);
    this.push(pushjson);
    done();


}

request
    .get('url')
    .on('error', function(err){
        console.log(err)
    })
    .pipe(parser)
    .pipe(fs.createWriteStream('result.json')) 

我已經為此苦苦掙扎了很長一段時間,在任何地方都找不到具有相同錯誤的帖子。 我想我可能不了解跨血清流如何完全起作用。 所以,請幫忙。

您可以使用NPM split模塊逐行解析流,我在流中使用了此模塊。 這是完整的代碼。

var stream = require('stream');
var parser = new stream.Transform({
objectMode: true
});
var request = require('request');
var split = require('split');
var fs = require('fs');

var currLine = 1;
var header;

parser._transform = function(line, encoding, done) {
    var time = {};
    if (currLine === 1) {
        header = line;
        console.log(header);
        var regEx = /[0-9][0-9]:[0-9][0-9]/;

        var m = regEx.exec(header);
        var splitTime = m[0].split(':');
        time = {
            hours: splitTime[0],
            minutes: splitTime[1]
        };
        console.log(time);
        var pushjson = JSON.stringify(time, null, 2);
        this.push(pushjson);
    }
    currLine++;
    done();
};

request
    .get('http://maps.weather.gov.hk/r4/input_files/latestReadings_AWS1')
    .on('error', function(err) {
        console.log(err);
    }).
pipe(split()).pipe(parser)
    .pipe(fs.createWriteStream('result.json'));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM