यदि आप अंतिम डेटा को एक सरणी में फिट कर सकते हैं तो क्या आप इसे एक स्ट्रिंग में भी फिट नहीं कर पाएंगे और इसे विभाजित कर सकते हैं, जैसा कि सुझाया गया है? किसी भी स्थिति में यदि आप एक बार में फ़ाइल को एक पंक्ति में संसाधित करना चाहते हैं, तो आप इस तरह से कुछ भी आज़मा सकते हैं:
var fs = require('fs');
function readLines(input, func) {
var remaining = '';
input.on('data', function(data) {
remaining += data;
var index = remaining.indexOf('\n');
while (index > -1) {
var line = remaining.substring(0, index);
remaining = remaining.substring(index + 1);
func(line);
index = remaining.indexOf('\n');
}
});
input.on('end', function() {
if (remaining.length > 0) {
func(remaining);
}
});
}
function func(data) {
console.log('Line: ' + data);
}
var input = fs.createReadStream('lines.txt');
readLines(input, func);
संपादित करें: ( फोपकिंस द्वारा टिप्पणी के जवाब में ) मुझे लगता है कि (कम से कम नए संस्करणों में) सबस्ट्रिंग डेटा की प्रतिलिपि नहीं बनाता है, लेकिन एक विशेष SlicedString ऑब्जेक्ट बनाता है (v8 स्रोत कोड पर त्वरित नज़र से)। किसी भी मामले में यहाँ एक संशोधन है जो उल्लेख किए गए विकल्प से बचा जाता है ("सभी काम और कोई नाटक जैक को एक सुस्त लड़का बनाता है" के लायक कई मेगाबाइट फ़ाइल पर परीक्षण किया गया है):
function readLines(input, func) {
var remaining = '';
input.on('data', function(data) {
remaining += data;
var index = remaining.indexOf('\n');
var last = 0;
while (index > -1) {
var line = remaining.substring(last, index);
last = index + 1;
func(line);
index = remaining.indexOf('\n', last);
}
remaining = remaining.substring(last);
});
input.on('end', function() {
if (remaining.length > 0) {
func(remaining);
}
});
}