2013-08-26 7 views
7

Sto provando a leggere un file di testo in modo asincrono e riga per riga in Node.js. Ho il seguente codice CoffeeScript:Node.js readline mancante dell'ultima riga di file?

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 

Funziona bene, tranne l'ultima riga del file non è mai riferito a meno che non termina con un ritorno a capo. c'è un modo per rimediare a questo (tranne, naturalmente, aggiungendo la nuova linea manualmente)?

+0

soluzione semplice, se i file non sono troppo grandi: forse basta usare 'readFile' e dividere in' \ n'? – WiredPrairie

+0

Sì, questo non è sicuramente quello che è il readline. Dovresti usare readline se stavi creando una shell o un REPL, non per leggere un file. Volete il modulo 'fs': http://nodejs.org/api/fs.html –

+0

il vostro commento mi sembra corretto e tecnicamente discutibile, dopotutto," hacking "significa appropriarsi degli strumenti laddove appropriato. più al punto: l'astrazione dei flussi ti dice di visualizzare non tanto i file, le richieste http e gli eventi di tastiera stdin, ma "flussi di dati". Detto questo, se readline non ha un modo per comunicare i "bit penzolanti" (prima di una nuova riga, ma dopo che il flusso di input è terminato), allora è la sua * API *, non il suo * scopo * che rende questa libreria un brutto adatto per il compito a portata di mano. – flow

risposta

1

È necessario utilizzare il modulo fs per questo e dividere il contenuto del file su \n caratteri per determinare dove terminano le linee.

+4

Leggi i contenuti del file? Cosa succede se la dimensione del file è 50G e la RAM è 4G? – ecdeveloper