Node.js如何将文件中的一行数字读入数组

Node.js如何将文件中的一行数字读入数组,node.js,Node.js,我有一个家庭作业,我要把数字文件读入数组,然后用它们做些什么 现在,我的问题不是读取中的文件。我知道怎么做。我不确定的是如何让它读入数组中的一行,这样程序就可以执行我应该执行的任何操作,并在处理完那行数字后读入下一行 txt文件相当大,每行大约有90个数字,每行以换行符结束 关于如何使程序一次只读取数组中的一行的任何提示都将不胜感激。谢谢。我认为最简单的方法是,如果文件很大 var fs = require('fs'); var remaining = ""; lineFeed = "

我有一个家庭作业,我要把数字文件读入数组,然后用它们做些什么

现在,我的问题不是读取中的文件。我知道怎么做。我不确定的是如何让它读入数组中的一行,这样程序就可以执行我应该执行的任何操作,并在处理完那行数字后读入下一行

txt文件相当大,每行大约有90个数字,每行以换行符结束


关于如何使程序一次只读取数组中的一行的任何提示都将不胜感激。谢谢。

我认为最简单的方法是,如果文件很大

var fs = require('fs');

var
  remaining = "";
  lineFeed = "\n",
  lineNr = 0;

fs.createReadStream('data.txt', { encoding: 'utf-8' })
  .on('data', function (chunk) {
    // store the actual chunk into the remaining
    remaining = remaining.concat(chunk);

    // look that we have a linefeed
    var lastLineFeed = remaining.lastIndexOf(lineFeed);

    // if we don't have any we can continue the reading
    if (lastLineFeed === -1) return;

    var
      current = remaining.substring(0, lastLineFeed),
      lines = current.split(lineFeed);

    // store from the last linefeed or empty it out
    remaining = (lastLineFeed > remaining.length)
      ? remaining.substring(lastLineFeed + 1, remaining.length)
      : "";

    for (var i = 0, length = lines.length; i < length; i++) {
      // process the actual line
      _processLine(lines[i], lineNr++);
    }
  })
  .on('end', function (close) {
    // TODO I'm not sure this is needed, it depends on your data
    // process the reamining data if needed
    if (remaining.length > 0) _processLine(remaining, lineNr);
  });

function _processLine(line, lineNumber) {
  // UPDATE2 with parseFloat
  var numbers = line.split(" ").map(function (item) { return parseFloat(item); });
  console.log(numbers, lineNumber);
}
var fs=require('fs');
变量
剩余=”;
lineFeed=“\n”,
lineNr=0;
fs.createReadStream('data.txt',{编码:'utf-8'})
.on('data',函数(块){
//将实际块存储到剩余的块中
剩余=剩余的.concat(块);
//看,我们有一个线路提要
var lastLineFeed=剩余。lastIndexOf(lineFeed);
//如果没有,我们可以继续阅读
if(lastLineFeed==-1)返回;
变量
当前=剩余。子字符串(0,lastLineFeed),
行=当前分割(换行);
//存储最后一个换行符中的内容或将其清空
剩余=(lastLineFeed>剩余.length)
?剩余.子字符串(lastLineFeed+1,剩余.长度)
: "";
对于(变量i=0,长度=lines.length;i0)\处理线(剩余长度,线号);
});
函数_processLine(行、行号){
//使用parseFloat更新2
var number=line.split(“”).map(函数(项){return parseFloat(项);});
控制台日志(编号、行号);
}

我认为最简单的方法是使用文件较大的文件

var fs = require('fs');

var
  remaining = "";
  lineFeed = "\n",
  lineNr = 0;

fs.createReadStream('data.txt', { encoding: 'utf-8' })
  .on('data', function (chunk) {
    // store the actual chunk into the remaining
    remaining = remaining.concat(chunk);

    // look that we have a linefeed
    var lastLineFeed = remaining.lastIndexOf(lineFeed);

    // if we don't have any we can continue the reading
    if (lastLineFeed === -1) return;

    var
      current = remaining.substring(0, lastLineFeed),
      lines = current.split(lineFeed);

    // store from the last linefeed or empty it out
    remaining = (lastLineFeed > remaining.length)
      ? remaining.substring(lastLineFeed + 1, remaining.length)
      : "";

    for (var i = 0, length = lines.length; i < length; i++) {
      // process the actual line
      _processLine(lines[i], lineNr++);
    }
  })
  .on('end', function (close) {
    // TODO I'm not sure this is needed, it depends on your data
    // process the reamining data if needed
    if (remaining.length > 0) _processLine(remaining, lineNr);
  });

function _processLine(line, lineNumber) {
  // UPDATE2 with parseFloat
  var numbers = line.split(" ").map(function (item) { return parseFloat(item); });
  console.log(numbers, lineNumber);
}
var fs=require('fs');
变量
剩余=”;
lineFeed=“\n”,
lineNr=0;
fs.createReadStream('data.txt',{编码:'utf-8'})
.on('data',函数(块){
//将实际块存储到剩余的块中
剩余=剩余的.concat(块);
//看,我们有一个线路提要
var lastLineFeed=剩余。lastIndexOf(lineFeed);
//如果没有,我们可以继续阅读
if(lastLineFeed==-1)返回;
变量
当前=剩余。子字符串(0,lastLineFeed),
行=当前分割(换行);
//存储最后一个换行符中的内容或将其清空
剩余=(lastLineFeed>剩余.length)
?剩余.子字符串(lastLineFeed+1,剩余.长度)
: "";
对于(变量i=0,长度=lines.length;i0)\处理线(剩余长度,线号);
});
函数_processLine(行、行号){
//使用parseFloat更新2
var number=line.split(“”).map(函数(项){return parseFloat(项);});
控制台日志(编号、行号);
}


您必须读取整个文件,然后将其拆分为行。如果文件太大,有更好的解决方案。创建流并将其传递给Lazy:在使用更复杂的解决方案之前,确保文件确实太大,无法放入内存。您必须读取整个文件,然后将其拆分为行。如果文件太大。创建一个流并将其传递给Lazy:在使用更复杂的解决方案之前,请确保文件确实太大,无法放入内存。KARASZI,您的示例是否将文件中的每一行作为名为“lines”的数组中的元素,或将行中的每一个数字作为元素?如果是第一行,我怎么能把每一行都分解成一个数组,每个数字都是一个元素呢?我只是重新阅读了我原来的帖子,听起来好像我要求每一行都是数组中的一个元素。很抱歉。我想做的是让脚本读一行并停止。将该行拆分为一个数组,每个数字都是数组中的一个元素。在数组上完成计算后,将其清除,然后转到下一行,将其拆分,并将该行中的每个数字放入数组中。文件中的每一行都有大约90个数字,因此我将有一个包含90个元素的数组,可以在文件中的每一行重复使用这些元素。你不要停下来,这是以事件为导向的。谢谢你的更新,这是我昨晚发布后想到的。在“流程行”功能中拆分该行。你能同时做到这一点吗?比如var numbers=parseFloat(line.split(“”)或者类似的东西?对于行'remaining=remaining.concat(chunk);'我犯了一个错误。TypeError:无法调用未定义的方法“concat”。你知道那里发生了什么吗?KARASZI,你的例子是让文件中的每一行都成为名为“lines”的数组中的元素,还是让行中的每一个数字都成为元素?如果是第一行,我怎么能把每一行都分解成一个数组,每个数字都是一个元素呢?我只是重新阅读了我原来的帖子,听起来好像我要求每一行都是数组中的一个元素。很抱歉。我想做的是让脚本读一行并停止。将该行拆分为一个数组,每个数字都是数组中的一个元素。在数组上完成计算后,将其清除,然后转到下一行,将其拆分,并将该行中的每个数字放入数组中。文件中的每一行大约有90个数字,因此我将有一个包含90个元素的数组,每个元素都可以重用