2017-06-19 81 views
1

我想逐行读取一个文件,并根据每行中的数据我必须对数据进行分类。Nodejs readline给出一些错误

var rd = readline.createInterface({ 
input: fs.createReadStream('/home/user/Desktop/text.txt'), 
output: process.stdout, 
console: false 
}); 

当执行该行时,将读取并打印在终端中。

但是当我尝试使用readline逐行读取文件时,出现错误。

rd.on('line', (input) => { 
console.log(input); 
}); 

我收到以下错误。

`Interface { 
_sawReturnAt: 0, 
isCompletionEnabled: true, 
_sawKeyPress: false, 
_previousKey: 
{ sequence: '\n', 
name: 'enter', 
ctrl: false, 
meta: false, 
shift: false }, 
domain: 
Domain { 
domain: null, 
_events: { error: [Function: debugDomainError] }, 
_eventsCount: 1, 
_maxListeners: undefined, 
members: [] }, 
_events: { line: [ [Function], [Function], [Function] ] }, 
_eventsCount: 1, 
_maxListeners: undefined, 
output: 
    WriteStream { 
    connecting: false, 
    _hadError: false, 
    _handle: 
    TTY { 
    bytesRead: 0, 
    _externalStream: {}, 
    fd: 9, 
    writeQueueSize: 0, 
    owner: [Circular], 
    onread: [Function: onread] }, 
_parent: null, 
_host: null, 
_readableState: 
    ReadableState { 
    objectMode: false, 
    highWaterMark: 16384, 
    buffer: [Object], 
    length: 0, 
    pipes: null, 
    pipesCount: 0, 
    flowing: null, 
    ended: false, 
    endEmitted: false, 
    reading: false, 
    sync: true, 
    needReadable: false, 
    emittedReadable: false, 
    readableListening: false, 
    resumeScheduled: false, 
    defaultEncoding: 'utf8', 
    ranOut: false, 
    awaitDrain: 0, 
    readingMore: false, 
    decoder: null, 
    encoding: null }, 
readable: false, 
domain: null, 
_events: 
    { end: [Object], 
    finish: [Function: onSocketFinish], 
    _socketEnd: [Function: onSocketEnd], 
    resize: [Object] }, 
_eventsCount: 4, 
_maxListeners: undefined, 
_writableState: 
    WritableState { 
    objectMode: false, 
    highWaterMark: 16384, 
    needDrain: false, 
    ending: false, 
    ended: false, 
    finished: false, 
    decodeStrings: false, 
    defaultEncoding: 'utf8', 
    length: 0, 
    writing: false, 
    corked: 0, 
    sync: false, 
    bufferProcessing: false, 
    onwrite: [Function: bound onwrite], 
    writecb: null, 
    writelen: 0, 
    bufferedRequest: null, 
    lastBufferedRequest: null, 
    pendingcb: 1, 
    prefinished: false, 
    errorEmitted: false, 
    bufferedRequestCount: 0, 
    corkedRequestsFree: [Object] }, 
writable: true, 
allowHalfOpen: false, 
destroyed: false, 
_bytesDispatched: 22151, 
_sockname: null, 
_writev: null, 
_pendingData: null, 
_pendingEncoding: '', 
server: null, 
_server: null, 
columns: 80, 
rows: 24, 
_type: 'tty', 
fd: 1, 
_isStdio: true, 
destroySoon: [Function], 
destroy: [Function] }, 
input: 
ReadStream { 
_readableState: 
    ReadableState { 
    objectMode: false, 
    highWaterMark: 65536, 
    buffer: [Object], 
    length: 0, 
    pipes: null, 
    pipesCount: 0, 
    flowing: false, 
    ended: true, 
    endEmitted: true, 
    reading: false, 
    sync: false, 
    needReadable: false, 
    emittedReadable: false, 
    readableListening: false, 
    resumeScheduled: false, 
    defaultEncoding: 'utf8', 
    ranOut: false, 
    awaitDrain: 0, 
    readingMore: false, 
    decoder: null, 
    encoding: null }, 
    readable: false, 
    domain: 
    Domain { 
    domain: null, 
    _events: [Object], 
    _eventsCount: 1, 
    _maxListeners: undefined, 
    members: [] }, 
_events: { end: [Object], data: [Function: onData] }, 
_eventsCount: 2, 
_maxListeners: undefined, 
path: '/home/user/Desktop/text.txt', 
fd: null, 
flags: 'r', 
mode: 438, 
start: undefined, 
end: undefined, 
autoClose: true, 
pos: undefined, 
bytesRead: 31, 
destroyed: true, 
closed: true }, 
historySize: 30, 
crlfDelay: 100, 
_prompt: '> ', 
terminal: true, 
line: '', 
cursor: 0, 
history: [ '1,2,3', '4,8,4,8', '2,2,2,2', '1,2,3,4' ], 
historyIndex: -1, 
prevRows: 0, 
paused: true, 
closed: true }` 

请帮助我对此很陌生。

+0

你使用的是什么版本的Node.js? 'node -v'。 – dan

+0

@dan我正在使用v7.7.2 –

+0

从[7.7.2文档](https://nodejs.org/docs/v7.7.2/api/readline.html#readline_readline_createinterface_options)'console'不是一个选项'createInterface'正在等待,所以我认为可以删除。在你特定的例子中,你也可以删除'output:process.stdout',因为你在每行记录日志。从'createInterface'中删除这两个选项是否有帮助? – dan

回答

1

您的代码看起来很好,但您使用的是Node.js REPL,而不是从文件运行代码,这就是您看到此行为的原因。

Node.js REPL(你在终端输入node时得到的)将会存储变量。但是,只有使用标识符时,该值也会返回。你看到的不是错误,而是rd对象。

Node.js REPL非常适合测试,但除非您有特定的使用原因,否则最好的办法是创建一个app.js文件,将代码添加到它,然后运行node app.js

如果您确实需要使用REPL编写多行代码,请务必在初始化时键入.editor,以便正确解释空白等。

此外,从7.7.2文档console不是createInterface期待的选项,以便可以删除。在你的特例中,你也可以删除output: process.stdout,因为你的日志记录每行使用line事件

+0

完成'on'函数内部的过程后,如何记录最终结果?我只是根据每行的长度创建一个'array'。最后,我想'记录'最长行的长度 –

+0

您需要侦听'close'事件来检测整个文件何时被读取。这里有一个例子:https://stackoverflow.com/questions/43003920/the-changes-im-making-to-my-array-inside-linereader-on-are-not-available-outsid/43004107#43004107 – dan