在节点js中每隔固定时间收集文件中的更改
Collect changes in a file every fixed time in node js
我有一个外部程序不时将数据流式传输到 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,但我不知道在这种情况下如何使用它们。
fs.createReadStream
可以带一个 start
参数
options can include start and end values to read a range of bytes from
the file instead of the entire file. Both start and end are inclusive
and start counting at 0
所以你需要保存最后读取的位置,并在start
上使用它。
您可以使用:instream.bytesRead
.
let bytesRead = 0;
instream.on('end', () => {
bytesRead = instream.bytesRead;
});
我有一个外部程序不时将数据流式传输到 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,但我不知道在这种情况下如何使用它们。
fs.createReadStream
可以带一个 start
参数
options can include start and end values to read a range of bytes from the file instead of the entire file. Both start and end are inclusive and start counting at 0
所以你需要保存最后读取的位置,并在start
上使用它。
您可以使用:instream.bytesRead
.
let bytesRead = 0;
instream.on('end', () => {
bytesRead = instream.bytesRead;
});