2011-09-11 25 views
1

配列に読み込むファイルを持っている宿題を持っています。Node.jsファイルから配列に1行の数値を読み取る方法

今、私の問題はファイルを読み取っていないことです。私はそれを行う方法を知っています。私は確信していないのは、配列に1行を読み込むようにする方法です。プログラムはそれが何であっても何でもでき、次の行で読み込みます。 。

txtファイルはかなり大きく、1行に90個の数字があり、各行は改行で終わります。

プログラムを一度にアレイに1行だけ読み込ませる方法についてのヒントは非常に高く評価されます。ありがとうございました。

+0

ファイル全体を読み取ってから行に分割する必要があります。 – Raynos

+0

ファイルが大きすぎる場合は、より良い解決策があります。 –

+0

ストリームを作成し、レイジーにそれを渡します 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のやり方ではありません。あなたは止まらず、イベント指向です。 –

関連する問題