2016-06-28 24 views
5

Mam skompresowany plik gzip, który chciałbym czytać wiersz po wierszu.Przeczytaj linię strumienia gzip po linii

var fs = require('fs') 
var zlib = require('zlib') 
var gunzip = zlib.createGunzip() 
var inp = fs.createReadStream('test.gz') 
var n = 0 

var lineProcessing = function (err, data) { 
    if (!err) { 
     n += 1 
     console.log ("line: " + n) 
     console.log (data.toString()) 
    } 
} 

inp 
    .on('data', function (chunk) { 
     zlib.gunzip (chunk, lineProcessing) 
    }) 
    .on('end', function() { 
    console.log ('ende'); 
    }); 

Chyba muszę ustawić chunksize dla zlib.createGunzip że czytałem tylko do następnego \n. Ale jak określić to dynamicznie?

Odpowiedz

12

To może być łatwiejsze w użyciu readline dla tego:

const fs  = require('fs'); 
const zlib  = require('zlib'); 
const readline = require('readline'); 

let lineReader = readline.createInterface({ 
    input: fs.createReadStream('test.gz').pipe(zlib.createGunzip()) 
}); 

let n = 0; 
lineReader.on('line', (line) => { 
    n += 1 
    console.log("line: " + n); 
    console.log(line); 
}); 
+0

A co, jeśli chcę, aby przesyłać strumień rozpakowane tworzą inną funkcję zamiast rozpakować plik lokalny? Dostaję dziwne błędy pochodzące z pliku readline.js .. – Tomas

+0

@Toma masz na myśli, że chcesz przetworzyć "zwykły" strumień (nie gzipowany)? Możesz użyć dowolnego odczytywalnego strumienia jako argumentu dla 'input'. – robertklep

+0

Próbuję użyć strumienia pochodzącego z zlib.gunzip(). mój przepływ pracy jest następujący: otrzymuję plik z aws s3, rozpakowuję go za pomocą programu gunzip, a następnie przekazuję strumień do readline, ale powoduje to błędy, czy może to być niespójny strumień czy coś takiego? – Tomas

Powiązane problemy