2013-08-26 46 views
7

Tôi đang cố đọc một tệp văn bản không đồng bộ và theo từng dòng dưới Node.js. Tôi có mã CoffeeScript sau:Dòng ghi Node.js thiếu dòng cuối cùng của tệp?

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 

Nó hoạt động tốt ngoại trừ dòng cuối cùng của tệp không bao giờ được báo cáo trừ khi nó bị chấm dứt bởi một dòng mới. là có cách nào để khắc phục điều này (ngoại trừ, tất nhiên, thêm các dòng mới bằng tay)?

+0

giải pháp đơn giản, nếu tệp không quá lớn: có thể chỉ cần sử dụng 'readFile' và chia nhỏ trên' \ n'? – WiredPrairie

+0

Vâng, điều này chắc chắn không phải là những gì readline là cho. Bạn sẽ sử dụng readline nếu bạn đang tạo một shell hoặc REPL, không phải để đọc một tập tin. Bạn muốn mô-đun 'fs': http://nodejs.org/api/fs.html –

+0

nhận xét của bạn đánh tôi cả về chính xác và kỹ thuật có thể tranh chấp — sau khi tất cả, 'hacking' là tất cả về việc chiếm dụng các công cụ khi thích hợp. nhiều hơn đến điểm: các trừu tượng suối cho bạn biết để xem không quá nhiều tập tin, http yêu cầu, và các sự kiện bàn phím stdin, nhưng 'dòng dữ liệu'. nói rằng, nếu readline không có cách nào để giao tiếp 'bit lúng túng' (trước một dòng mới, nhưng sau khi luồng đầu vào kết thúc), thì nó là * API *, không phải * mục đích dự định * khiến thư viện này trở nên tồi tệ phù hợp với nhiệm vụ trong tầm tay. – flow

Trả lời

1

Bạn nên sử dụng mô-đun fs cho điều này và chia nội dung tệp trên \n ký tự để xác định nơi kết thúc dòng.

+4

Đọc nội dung tệp? Điều gì nếu kích thước tập tin là 50G và RAM của bạn là 4G? – ecdeveloper