Created
September 26, 2012 12:32
-
-
Save j-5-s/3787760 to your computer and use it in GitHub Desktop.
Node Line Reader (Stream for large files)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'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