我有一个外部程序,该程序不时地将数据流式传输到csv文件中(但退出很多)。 我想每10秒收集一次所有更改的数据,并对其进行一些处理。 表示我只想处理以前未处理过的行。
这是基本代码:
function myFunction() {
var loop = setInterval(
() =>
{
var instream = fs.createReadStream("rawData.csv"); //should somehow include only new data since last cycle
var outstream = fs.createWriteStream("afterProcessing.csv");
someProcessing(instream, outstream);
outstream.on('finish', () => {
sendBackResults("afterProcessing.csv");
});
//will exit the loop when 'run' flag will change to false
if(!run) ? clearInterval(loop) : console.log(`\nStill Running...\n`) ;
} , 10000 );
}
现在,我尝试使用chokidar和fs.watch,但在这种情况下我不知道如何使用它们。
答案 0 :(得分:0)
fs.createReadStream
可以使用start
参数
选项可以包含开始和结束值,以从中读取一定范围的字节 文件而不是整个文件。开始和结束都包括在内 然后从0开始计数
因此,您需要保存最近读取的位置,并在start
上使用它。
您可以使用:instream.bytesRead
。
let bytesRead = 0;
instream.on('end', () => {
bytesRead = instream.bytesRead;
});