2013-08-26 44 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的目的。如果您正在創建shell或REPL,而不是讀取文件,則可以使用readline。你需要'fs'模塊:http://nodejs.org/api/fs.html –

+0

你的評論讓我覺得既正確又技術上有爭議 - 畢竟,'黑客'就是在適當的情況下使用工具。更重要的是:流抽象告訴你不要查看那麼多的文件,http請求和標準鍵盤事件,而是'數據流'。這表示,如果readline沒有方法來溝通'懸空位'(在換行符之前,但在輸入流完成之後),那麼它就是它的* API *,而不是它的*預期目的*,使得這個庫很糟糕適合手頭的任務。 – flow

回答

1

您應該爲此使用fs模塊,並將文件內容拆分爲\n字符以確定行結束的位置。

+4

閱讀文件內容?如果文件大小是50G而你的RAM是4G呢? – ecdeveloper