当前位置: 首页 > 面试题库 >

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

孙熠彤
2023-03-14
问题内容

我想将非常大的文件读入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);
    }
  });
}


 类似资料:
  • rank ▲ ✰ vote url 73 347 92 445 url 把文件一行行读入数组 怎么样才能一行行的读一个文件并把每行作为一个元素存入一个数组? 我想读取文件的没一行,然后把每行加入到数组的最后.我没找到这样的方法而且我也没能在Python中找到创建字符数组的方法. with open(fname) as f: content = f.readlines() 我想你说的是[l

  • 问题内容: 我正在尝试将csv文件“ read_ex.csv”读入数组。我在web / stackoverflow上进行了无休止的搜索,以找到一种将文件读入数组的方法。我能做的最好的事情是以流方式读取它,但是由于文件大小可变,我无法将其存储在数组中。我相信ArrayList是处理可变大小数组的方法,但是我不知道如何使用它。本质上,我希望能够在while循环结束后访问String数组“ values

  • 我正在从一个txt文件中读取一个等级列表到一个数组中。它在读取用户输入时运行良好,但在扫描文件时,我无法读取每一行。学生人数是可变的。每个学生的分数是可变的。我在阅读学生人数和作业数量方面没有问题,但在阅读文件时,我很难从每一行中提取每个学生的整数(分数)。输入可以是a或b(或更多的学生/作业): txt-example1(包括//和//之后的注释是我自己的,不在txt文件中) TXT-例子 我可

  • 我读过其他一些类似于此的问题,但都使用了imports和extras,除了importjava.io.*之外,我不想使用任何imports;也没有任何名单。另外,这个is方法中的for循环是我在搞乱它,因为我无法弄清楚它。 }public static void main(string[]args)抛出IOException,FileNotFoundException{int[]array=pro

  • 问题内容: 我认为能够将文本文件读入和写出字符串数组的能力是相当普遍的要求。从一种语言开始消除最初访问数据库的需求时,它也非常有用。Golang中是否存在? 例如 和 我宁愿使用现有的而不是重复的。 问题答案: 从Go1.1版本开始,有一个bufio.Scanner API可以轻松读取文件中的行。考虑上面的以下示例,该示例使用Scanner重写: