NodeJS читает построчно и следующую строку

#javascript #node.js #typescript

#javascript #node.js #typescript

Вопрос:

Я использую модуль Node readline для чтения файлов построчно, одновременно проверяя определенные условия в каждой строке. Однако файлы несовместимы при разрывах строк. Иногда строка переходит в следующую строку, в результате чего условие if не перехватывается. Есть ли способ проверить следующую строку, находясь в текущей строке? Очень признателен за любую помощь. Спасибо!

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

async function processLineByLine() {
  const fileStream = fs.createReadStream('input.txt');

  const rl = readline.createInterface({
    input: fileStream,
    crlfDelay: Infinity
  });
  // Note: we use the crlfDelay option to recognize all instances of CR LF
  // ('rn') in input.txt as a single line break.

  for await (const line of rl) {
    // Each line in input.txt will be successively available here as `line`.
    if(line.includes('abc') amp;amp; nextline.includes('def')) {
     
  }
}

processLineByLine();
 

Пример ввода

однострочный

 <ref href="sample.txt">
 

двухстрочный

 <ref 
href="sample.txt">
 

Комментарии:

1. Это очень обратный вопрос, поскольку разрыв строки .. т.Е. Текст, простирающийся от одной строки до следующей строки, сам по себе является НОВОЙ СТРОКОЙ. не просто продолжалась одна и та же строка. если ваш текст занимает несколько строк, вам нужно выполнить более тщательный поиск, а не просто проверять одну строку

2. согласен. однако файлы, которые я получаю, несовместимы с разрывами строк. Некоторые будут в одной строке, некоторые — в двух. Однако мне нужно проверить все в этой одной или двух строках, чтобы выполнить операцию.

3. Возможно, приведите пример ввода. Покажите, как выглядят разбитые и неразрывные строки прямо в вашем вопросе.

4. тогда поиск построчно не является ответом, буферизуйте несколько строк или просто прочитайте весь файл сразу

5. обновлено с помощью примера ввода.

Ответ №1:

Вы могли бы сделать что-то вроде этого

   let previousLine;
  for await (let line of rl) {
    // Each line in input.txt will be successively available here as `line`.
    // check if current line fulfils your conditions
    // if not and previousLine has value check conditions with the 2 lines 
    // if not you store current line into previousLine 
    previousLine = line;
  }