2013-08-26 29 views
7

私は、Node.jsの下でテキストファイルを非同期で行ごとに読み込もうとしています。私は、次のCoffeeScriptのコードを持っている:Node.js readlineにファイルの最後の行がありませんか?

readline = require 'readline' 
fs  = require 'fs' 

#-------------------------------------------------------------------- 
lines_of = (route, handler) -> 
    #.................................................................. 
    stream = readline.createInterface 
    input: fs.createReadStream route 
    output: process.stdout 
    terminal: false 
    #.................................................................. 
    stream.on 'close', -> 
    handler null, null 
    #.................................................................. 
    stream.on 'error', (error) -> 
    handler error 
    #.................................................................. 
    stream.on 'line', (line) -> 
    handler null, line 

それはそれは改行で終了されない限り、報告されることはありませんファイルの非常に最後の行を除いて正常に動作します。これを修正する方法はありますか(もちろん、改行を手動で追加することを除いて)?

+0

ファイルが大きすぎない場合は、単純に 'readFile'を使用して' \ n'で分割しますか? – WiredPrairie

+0

ええ、これは間違いなくreadlineの目的ではありません。ファイルを読むのではなく、シェルやREPLを作っていたらreadlineを使います。あなたは 'fs'モジュールを望んでいます:http://nodejs.org/api/fs.html –

+0

あなたのコメントは私に、正確かつ技術的に紛争があると訴えます。結局のところ、「ハッキング」はすべて適切な道具を適切に使うことに関するものです。ストリームの抽象化では、ファイル、http要求、標準的なキーボードイベントではなく、データの流れを見るように指示します。つまり、もしreadlineが 'ダングルビット(dangling bits)'(改行の前ではなく入力ストリームが終了した後)を伝える方法を持っていなければ、* API *であり、意図した目的ではなく*このライブラリを悪くする手元にある作業に合ってください。 – flow

答えて

1

これにはfsモジュールを使用し、ファイルの内容を\n文字で分割して、行の終わりを特定する必要があります。

+4

ファイルの内容を読み込みますか?ファイルサイズが50GでRAMが4Gの場合はどうなりますか? – ecdeveloper

関連する問題