2011-09-11 71 views
1

我有一个家庭作业,其中我有数字文件读入数组,然后对它们做些什么。Node.js如何从一个文件读取一行数字到一个数组

现在,我的问题是没有读取文件。我知道如何做到这一点。我不确定的是如何让它读入数组中的一行,以便程序可以做我应该做的任何事情,并在完成与该行数字一起工作时读入下一行。

txt文件非常大,每行有90个数字,每行以行返回结束。

有关如何让程序一次只读取一行到阵列的任何提示将不胜感激。谢谢。

+0

您必须读取整个文件,然后将其分成几行。 – Raynos

+0

如果文件太大,有更好的解决方案。 –

+0

创建一个流并将其传递给Lazy: http://stackoverflow.com/questions/6156501/read-a-file-one-line-at-a-time-in-node-js –

回答

1

我认为最简单的方法是使用fs.Readstream,如果文件很大。

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); 
} 
+0

KARASZI,你的例子是否从文件中的每一行中创建一个名为'lines'的数组中的元素或该行中的每个数字元素?如果它是第一个,我怎么能把每一行都分解成一个数组,每个数字都是一个元素? – user939287

+0

我刚刚重读了我原来的文章,听起来好像我要求每行都是数组中的元素。对于那个很抱歉。我想要做的是让脚本读一行并停止。将行分成一个数组,每个数字都是数组中的一个元素。在数组上完成计算后,将其清除,然后移至下一行并将其分解并将该行中的每个数字放入数组中。文件中的每一行都有大约90个数字,因此我将拥有一个包含90个元素的数组,这些数据将在文件中的每一行中重复使用。 – user939287

+0

这不是Node.js的做事方式。你不停,它是面向事件的。 –

相关问题