2016-06-28 8 views
5

से मैं एक संकुचित gzip फ़ाइल जो मैं लाइन द्वारा लाइन को पढ़ने के लिए चाहते हैं मिल गया है।पढ़ें gzip धारा लाइन लाइन

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'); 
    }); 

मैं मुझे लगता है कि मैं सिर्फ अगले \n जब तक पढ़ zlib.createGunzip के लिए एक chunksize निर्धारित करने की आवश्यकता है लगता है। लेकिन यह गतिशील रूप से कैसे निर्धारित करें?

उत्तर

12

यह इस के लिए readline उपयोग करने के लिए आसान हो सकता है:

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

के बारे में क्या होगा यदि मैं स्ट्रीम करने के लिए अनज़िप धारा एक और समारोह के लिए फार्म के बजाय स्थानीय फ़ाइल अनज़िप करना चाहते हैं? मैं कुछ अजीब त्रुटियों readline.js फ़ाइल से आ पाने .. – Tomas

+0

@Tomas आप मतलब है कि आप एक "नियमित" धारा (नहीं एक gzipped एक) को संसाधित करना चाहते हैं? आप 'इनपुट' के लिए तर्क के रूप में किसी भी पठनीय स्ट्रीम का उपयोग कर सकते हैं। – robertklep

+0

मैं zlib.gunzip() से आने वाली स्ट्रीम का उपयोग करने की कोशिश कर रहा हूं। मेरे काम प्रवाह है: मैं एडब्ल्यूएस S3 से फ़ाइल मिलता है, यह gunzip के प्रयोग से खोलना है, तो धारा ReadLine के पास है, लेकिन यह मुझे त्रुटियों फेंक है, यह हो सकता है कि धारा असंगत या कुछ और है? – Tomas

संबंधित मुद्दे