node.js:将文本文件读入数组。(每行一个项目在数组中。)
我想将非常大的文件读入node.js的JavaScript数组中。
因此,如果文件是这样的:
first linetwo
three
...
...
我将拥有数组:
['first line','two','three', ... , ... ]
该函数将如下所示:
var array = load(filename);
因此,将其全部加载为字符串然后拆分的想法是不可接受的。
回答:
如果您可以将最终数据拟合到数组中,那么是否也不能像建议的那样将其拟合为字符串并进行拆分?无论如何,如果您希望一次只处理一行文件,也可以尝试如下操作:
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);
作为对 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);
}
});
}
以上是 node.js:将文本文件读入数组。(每行一个项目在数组中。) 的全部内容, 来源链接: utcz.com/qa/422245.html