Leia grandes arquivos linha por linha em node.js

Atualizar

Esta solução não funciona mais com a versão mais recente do node.js desde que o bufferSizesuporte foi encerrado , para uma solução atualizada, em vez de ver https://coderwall.com/p/ohjerg?&p=8&q=


Ao trabalhar com arquivos de dados grandes (500 MB +), você não quer ler um arquivo inteiro na memória, atualmente a API node.js não suporta a leitura de arquivos linha por linha usando createReadStream().

Por esta razão, verificamos cada caractere para uma nova linha, isso pode parecer um pouco estranho, mas uma vez que você começa a trabalhar com arquivos grandes, manter sua memória baixa é a principal prioridade, e os prós rapidamente superam os contras.

//get the filesystem module
var fs = require('fs'),
stream
= fs.createReadStream("/path/to/large/file", {
flags
: 'r',
encoding
: 'utf-8',
fd
: null,
bufferSize
: 1
}),
line
='';
//start reading the file
stream
.addListener('data', function (char) {
// pause stream if a newline char is found
stream
.pause();
if(char == 'n'){
(function(){
//do whatever you want to do with the line here.
//....
//When done set the line back to empty, and resume the strem
line
= '';
stream
.resume();
})();
}
else{
//add the new char to the current line
line
+= char;
stream
.resume();
}
})