2016-09-14 4 views
0

Ich habe eine sehr große Datei, die ich brauche, um die Daten zwischen den Trennzeichen "BEGIN DATA" und "END DATA" zu analysieren und zu lesen, dann mache ich so etwas wie das Entschlüsseln des Blocks.Große Dateien lesen und analysieren

kann ich die Datei öffnen einfach die „fs“ Bibliothek wie so verwenden:

fs.readFile(files[0], 'utf8', function (err, data) { 
    if (err) return console.log(err); 
    console.log(data) 
}); 

aber ich muss dann über einen Strom, der die Daten zwischen den Begrenzungszeichen in Blöcken gelesen so nicht große Mengen an Speicher verwenden .

 -----BEGIN DATA----- 
     MIIEzDCCArSgAwIBAgIVCugKYzMN5ra8zPWxYE8pUU9SxjYSMA0GCSqGSIb3DQEB 
     CwUAMHAxCzAJBgNVBAYTAkdCMRUwEwYDVQQIDAxXYXJ3aWNrc2hpcmUxEDAOBgNV 
     BAcMB1dhcndpY2sxEDAOBgNVBAoMB0VudHJ1c3QxETAPBgNVBAsMCFBLSSBURUFN 
     -----END DATA----- 
     -----BEGIN DATA----- 
     MIIETzCCAjegAwIBAgIVBShP2Mx74DZEyNKwYZZPGntRmSWnMA0GCSqGSIb3DQEB 
     DQUAMHIxCzAJBgNVBAYTAkdCMRUwEwYDVQQIDAxXYXJ3aWNrc2hpcmUxEDAOBgNV 
     BAcMB1dhcndpY2sxDDAKBgNVBAoMA0lCTTERMA8GA1UECwwIUEtJIFRFQU0xGTAX 
     5/62 
     -----END DATA----- 

Antwort

1

Der einfachste Weg ist es, eine Stream-Bibliothek zu Knotens fs.createReadStream, gekoppelt zu verwenden, in Ihrem Fall die splitBy Methode in Highland.js wäre geeignet:

_(fs.createReadStream(files[0], { encoding: 'utf8' })) 
    .splitBy('-----BEGIN DATA-----') 
    .splitBy('-----END DATA-----') 
    .each(_.log) 
+0

Dank dieses interessant aussieht. Ich kann jedoch nicht damit aufhören, die Bibliothek zu benutzen. Ich habe das gemacht 'const readFile = _.wrapCallback (fs.readFile); const stream = _ (['meinedatei.txt']). Map (readFile) .parallel (2); 'aber kann nicht herausfinden, wie man die Daten bekommt – user1513388

+0

Probieren Sie den Beispielcode aus. Der an _ _ each() 'bereitgestellte Callback wird mit dem Inhalt jedes Ihrer begrenzten Blöcke aufgerufen, die Sie dann zur Verarbeitung zeilenweise aufteilen können. –