Skip to content

Instantly share code, notes, and snippets.

@j-5-s
Created September 26, 2012 12:32
Show Gist options
  • Save j-5-s/3787760 to your computer and use it in GitHub Desktop.
Save j-5-s/3787760 to your computer and use it in GitHub Desktop.
Node Line Reader (Stream for large files)
'use strict';
function lineReader(fileName){
var EM = require("events").EventEmitter,
ev = new EM(),
stream = require("fs").createReadStream(fileName),
remainder = null;
stream.on("data",function(data){
if(remainder !== null){//append newly received data chunk
var tmp = new Buffer(remainder.length+data.length);
remainder.copy(tmp);
data.copy(tmp,remainder.length);
data = tmp;
}
var start = 0;
for(var i=0; i<data.length; i++){
if(data[i] == 10){ //\n new line
var line = data.slice(start,i);
ev.emit("line", line);
start = i+1;
}
}
if(start<data.length){
remainder = data.slice(start);
}else{
remainder = null;
}
});
stream.on("end",function(){
if( null!== remainder) {
ev.emit("line",remainder);
}
});
stream.on('error',function(e){
console.log(e);
});
return ev;
}
module.exports = lineReader;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment