node.js:将文本文件读入数组。(每行一个项目在数组中。)

我想将非常大的文件读入node.js的JavaScript数组中。

因此,如果文件是这样的:

first line

two

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

回到顶部