如何解决node.js:将文本文件读入数组每一行都是数组中的一个项目
如果您可以将最终数据放入数组中,那么您是否也可以将其放入字符串中并按照建议进行拆分?在任何情况下,如果您想一次处理一行文件,您也可以尝试以下操作:
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 源代码)。无论如何,这里有一个修改,它避免了提到的子字符串(在一个价值几兆字节的文件上测试“All work and no play makes Jack a dull boy”):
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 中的 JavaScript 数组。
所以,如果文件是这样的:
first line
two
three
...
...
我会有数组:
['first line','two','three',...,... ]
该函数如下所示:
var array = load(filename);
因此,将其全部加载为字符串然后拆分的想法是不可接受的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。