Якщо ви можете помістити підсумкові дані в масив, чи не могли б ви також вмістити їх у рядок і розділити їх, як було запропоновано? У будь-якому випадку, якщо ви хочете обробити файл один рядок, ви також можете спробувати щось подібне:
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);
EDIT: (у відповідь на коментар phopkins ) Я думаю, що (принаймні, в нових версіях) підрядка не копіює дані, а створює спеціальний об'єкт 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);
}
});
}