电子上的节点:FS ReadLine跳过前x行文件

时间:2018-03-06 07:34:37

标签: node.js electron readline

当尝试使用 createReadStream readline 逐行读取文件时,我没有获得所有行。跳过前x行。使用包含10000行的文件进行测试,跳过前4000个。

const remote = window.require('electron').remote;
const fs = remote.require('fs');
const readline = remote.require('readline');
const instream = fs.createReadStream('test.txt'); 
const rl = readline.createInterface(instream);
let row = 0;
rl.on('line', function (line) {
  row++;
  console.log(row + ': ' + line);
});

使用fs.readFileSync读取文件会返回所有行。

const data = fs.readFileSync('test.txt');
console.log(data.toString());

1 个答案:

答案 0 :(得分:0)

一旦调用createInterface,它将开始读取文件并发出line事件,因此必须确保on('line', ...)之后同步调用createInterface(即,不之间的任何awaitsetTimeout回调。

在我的情况下,我随机丢失了前几百行文件,因为在await之间有createInterface并读取了以下行:

const rl = readline.createInterface(stream);

const connection = await connectToDatabase(); // await causes lines to be lost!

for await (const line of rl) {
    ...
}