Собирать изменения в файле каждый фиксированный раз в узле JS - PullRequest
0 голосов
/ 12 марта 2019

У меня есть внешняя программа, которая время от времени передает данные в 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, но не смогНе понимаю, как использовать их в этом случае.

1 Ответ

0 голосов
/ 12 марта 2019

fs.createReadStream может принимать параметр start

. Опции могут включать в себя начальные и конечные значения для считывания диапазона байтов из файла вместо всего файла.И начало, и конец включаются и начинают отсчет с 0

Таким образом, вам нужно сохранить последнюю прочитанную позицию и использовать ее на start.

. Вы можете получить это, используя:instream.bytesRead.

let bytesRead = 0;

instream.on('end', () => {
  bytesRead = instream.bytesRead;
});
...