Próbuję odczytać plik tekstowy asynchronicznie i wiersz po wierszu pod Node.js. Mam następujący kod coffeescript:Node.js readline brakuje ostatniej linii pliku?
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
Współpracuje z wyjątkiem ostatniej linii plików nigdy nie jest zgłaszanych, o ile nie jest zakończony znakiem nowej linii. czy jest jakiś sposób, aby temu zaradzić (z wyjątkiem oczywiście ręcznego dodawania nowej linii)?
proste rozwiązanie, jeśli pliki nie są zbyt duże: może po prostu użyj 'readFile' i podziel na' \ n'? – WiredPrairie
Tak, to zdecydowanie nie jest to, do czego służy readline. Używałbyś readline, jeśli tworzyłeś powłokę lub REPL, a nie do czytania pliku. Chcesz moduł 'fs': http://nodejs.org/api/fs.html –
Twój komentarz uderza mnie jako będący poprawnym i technicznie spornym - w końcu" hakowanie "polega na przywłaszczaniu narzędzi tam, gdzie jest to właściwe. bardziej do rzeczy: abstrakcja strumieni pozwala wyświetlić nie tyle pliki, żądania HTTP i zdarzenia klawiatury stdin, ale "strumienie danych". to powiedziawszy, jeśli readline nie ma sposobu na przekazanie "zwisających bitów" (przed znakiem nowej linii, ale po zakończeniu strumienia wejściowego), to jest to jego * API *, a nie jego * zamierzony cel *, który czyni tę bibliotekę złym odpowiedni do danego zadania. – flow