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的评论)我认为(至少在较新的版本)substring不会复制数据,但创建一个特殊的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);
    }
  });
}

同步:

var fs = require('fs');
var array = fs.readFileSync('file.txt').toString().split("n");
for(i in array) {
    console.log(array[i]);
}

异步:

var fs = require('fs');
fs.readFile('file.txt', function(err, data) {
    if(err) throw err;
    var array = data.toString().split("n");
    for(i in array) {
        console.log(array[i]);
    }
});

使用Node.js readline模块。

var fs = require('fs');
var readline = require('readline');

var filename = process.argv[2];
readline.createInterface({
    input: fs.createReadStream(filename),
    terminal: false
}).on('line', function(line) {
   console.log('Line: ' + line);
});
链接地址: http://www.djcxy.com/p/52275.html

上一篇: node.js: read a text file into an array. (Each line an item in the array.)

下一篇: How to read a file line by line into an array in node.js