2016-09-14 50 views
0

"BEGIN DATA"と "END DATA"区切り文字の間でデータを解析して読み込むために必要な非常に大きなファイルがあります。大きなファイルの読み込みと解析

私はそうのような「FS」ライブラリを使用して簡単にファイルを開くことができます。

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

はしかし、私は大量のメモリを使用しないので、ストリームを経由して、ブロック内の区切り文字の間でデータを読み取る必要があります。

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

答えて

1

最も簡単な方法は、あなたのケースでHighland.jssplitBy方法が適しているであろう、ノードのfs.createReadStreamに結合されたストリームのライブラリを使用することです:これは面白そう

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

感謝。しかし、私はライブラリの使い方をやめることができません。私はこれをしました 'const readFile = _.wrapCallback(fs.readFile); const stream = _(['myfile.txt'])。map(readFile).parallel(2); 'データを取得する方法を理解できません – user1513388

+0

提供されているサンプルコードを試してください。 '_.each()'に与えられたコールバックは区切られたブロックのそれぞれの内容で呼び出されます。区切られたブロックの内容は、分割して行ごとに処理することができます。 –

関連する問題