Nodejs 用readline模块,怎么实现读到某一行就不再继续读下去了?

Nodejs 用readline模块,怎么实现读到某一行就不再继续读下去了?

var fs = require(‘fs’); //var filename = process.argv[2]; var filename = ‘test.txt’; //var filename = __filename; var rl = require(‘readline’).createInterface({ input: fs.createReadStream(filename), terminal: false });

var i = 0 ; rl.on(‘line’, function(line){ console.log('Line: ’ + line); i++; if(i===4){ console.log(‘here’); rl.pause();//怎么不起作用 //process.exit(0); } });


4 回复

要实现使用 Node.js 的 readline 模块在读取到某一行时停止读取文件,可以通过调用 rl.pause() 方法来暂停 readline 接口。如果需要完全停止读取并在特定条件下退出程序,可以结合 rl.pause()process.exit() 方法。

下面是修改后的代码示例:

var fs = require('fs');
var readline = require('readline');

var filename = 'test.txt';

var rl = readline.createInterface({
    input: fs.createReadStream(filename),
    terminal: false
});

var i = 0;

rl.on('line', function(line) {
    console.log('Line: ' + line);
    i++;

    if (i === 4) {
        console.log('Stopping after reading the 4th line.');
        rl.pause(); // 暂停 readline 接口
        process.exit(0); // 退出进程
    }
});

解释:

  1. 引入模块:首先引入 fsreadline 模块。
  2. 创建 readline 接口:通过 readline.createInterface() 创建一个 readline 接口,并指定输入流为文件的可读流。
  3. 监听行事件:通过 .on('line', callback) 监听每一行的数据。每当读取到新行时,回调函数会被触发。
  4. 计数器:使用变量 i 来记录已经读取的行数。
  5. 条件判断:当 i 等于 4 时,输出一条消息并调用 rl.pause() 暂停 readline 接口,然后调用 process.exit(0) 终止当前进程。

注意事项:

  • rl.pause() 只是暂停 readline 接口,不会立即终止程序。如果需要彻底停止程序执行,可以使用 process.exit()
  • 如果不希望程序直接退出,可以在 if 语句中添加其他逻辑处理,而不是调用 process.exit()

这样就可以实现读取到某一行后停止读取文件的功能。


找个上万行的文本文件来测试,停止的行数设定到2000以上。 rs.pause停止的是下一次的读文件操作,已经读取的数据会一直触发line事件,直到消耗完毕,因此pause的时效性取决于fs读文件的内部缓存大小(64K?)。不想处理n行后的数据,那么取消当前监听器吧,rl.removeAllListeners(‘line’)

原来如此,非常感谢回答!! 顺便弱弱的问下,这些东西从哪儿看的? 好像api没有说的这么清楚啊

你可以使用 rl.pause() 来停止读取行,但需要确保在后续处理中调用 rl.resume() 才能继续读取。然而,在你的需求中,一旦读取到特定行(例如第4行),你希望完全停止读取,可以考虑直接关闭 readline 接口。

以下是一个修改后的示例代码:

var fs = require('fs');
var readline = require('readline');

var filename = 'test.txt';
var rl = readline.createInterface({
    input: fs.createReadStream(filename),
    terminal: false
});

var i = 0;

rl.on('line', function(line) {
    console.log('Line: ' + line);
    i++;
    
    if (i === 4) {
        console.log('Stopping after this line.');
        rl.close(); // 关闭 readline 接口,停止读取
    }
});

解释:

  1. 创建 readline 接口:通过 readline.createInterface 创建一个 readline 接口,指定文件流作为输入。
  2. 监听行事件:通过 rl.on('line', ...) 监听每一行的数据。
  3. 计数器:使用变量 i 来记录已经读取的行数。
  4. 条件判断:当 i 等于 4 时,打印一条消息并调用 rl.close() 来停止读取行。

这样,当你读取到第4行时,程序将停止继续读取行数据。

回到顶部