2016-05-06 18 views
0

Read a file one line at a time in node.js?の複製ではありません。ファイルを1行ずつ読み取る方法

他のスレッドのすべての例は、ファイルを行ごとに読み取る方法に答えています。しかし、どれも、1行ずつファイルを一読する方法に焦点を当てていません。

が、私は他のスレッドで accepted answerからコードを適応している、説明するために:

let index = 0; 

const rl = readline.createInterface({ 
    input: fs.createReadStream(path.resolve(__dirname, './countries.txt')) 
}); 

rl.on('line',() => { 
    console.log('line', ++index); 

    rl.pause(); 
}); 

コードを実行するマシンの速度に応じて、このプログラムを実行しているの出力は、の線に沿って何かになります:

line 1 
line 2 
line 3 
line 4 
line 5 
line 6 
line 7 
line 8 
... 
line 564 
line 565 
line 566 
line 567 

どのようにファイルのライン・バイ・ラインを読み取るために一線順次

この例でrl.pauseを使用する意図を強調するには:ファイルから1行を取得し、明示的に2行目を要求するまで、ファイルの読み取りを停止する必要があります。

+0

答えはありませんが、https://github.com/nickewing/line-reader#usageがファイルを1行ずつ読み込むように抽象化しています。 – Gajus

答えて

2

なぜ私はreadlineインターフェイスを使ってファイルを読むのか分かりません。

私は、あなたは間違いなく一度に一つの行を取得するよう

var splitstream = fs.createReadStream(file).pipe(split()) 
    splitstream 
    .on('data', function (line) { 
     //each chunk now is a seperate line! 
     splitstream.pause(); 
     setTimeout(function(){ splitstream.resume() }, 500); 
    }) 

として、あなたはsplitを使用することをお勧めします。

**コメントの編集。

+0

ファイルから行を取得し、明示的に新しい行を要求するまで処理を停止する必要があります。 – Gajus

+0

必要に応じてストリームを一時停止してから再開します。 –

+0

あなたは正しいです。それで 'readline'の目的は何ですか? – Gajus

0

ファイルを1行ずつ読み込み、次の行を読み込む前に行を処理する方法は次のとおりです。

var fs=require('fs'); 
var readable = fs.createReadStream("data.txt", { 
    encoding: 'utf8', 
    fd: null 
}); 
var lines=[];//this is array not a string!!! 
readable.on('readable', function() { 
    var chunk,tmp=''; 
    while (null !== (chunk = readable.read(1))) { 
    if(chunk==='\n'){ 
     tmp=''; 
     lines.push(tmp); 
    // here tmp is containing a line you can process it right here. 
    // As i am just pushing the line in the array lines. 
    // use async if you are processing it asynchronously. 
    }else 
     tmp+=chunk; 
    } 
}); 
readable.on('end',function(){ 
    var i=0,len=lines.length; 
    while(i<len) 
    console.log(lines[i++]); 
}); 
関連する問題