Así que tengo un fragmento de código que toma una línea de un archivo de texto y la busca en otro archivo de texto. Este es mi código:
const searchStream = (filename, text) => { return new Promise((resolve) => { const inStream = fs.createReadStream(filename + '.txt'); const outStream = new stream; const rl = readline.createInterface(inStream, outStream); const result = []; const regEx = new RegExp(text, "i") rl.on('line', function (line) { if (line && line.search(regEx) >= 0) { result.push(line) } }); rl.on('close', function () { console.log('finished search', result) resolve(result) }); }) } searchStream('base_output', str1); searchStream('base_output', str2); searchStream('base_output', str3);Mis preguntas son:
A. ¿Cómo realizo una búsqueda de múltiples cadenas (str1, str2, str3) porque solo lo hace para str1 y luego se detiene?
B. ¿Cómo detengo la búsqueda cuando encuentra una cadena, por ejemplo, searchStream('base_output', str1); -> str1 se encuentra en el archivo de texto, la búsqueda luego se detiene y luego se mueve a str2, luego a str3 y escribe las cadenas, por ejemplo, en otro archivo de texto.
A) Cuando lee una línea, puede buscar varias cadenas una por una. B) Como estamos usando múltiples sentencias if aquí en lugar de if else , la función busca cada cadena una tras otra. (PS, puede leer sobre cómo escribir en archivos en la documentación de nodejs)
const searchStream = (filename, text, text2, text3) => { return new Promise((resolve) => { const inStream = fs.createReadStream(filename + '.txt'); const outStream = new stream; const rl = readline.createInterface(inStream, outStream); const result = []; const regEx = new RegExp(text, "i") const regEx2 = new RegExp(text2, "i") const regEx3 = new RegExp(text3, "i") rl.on('line', function (line) { if (line && line.search(regEx) >= 0) { result.push(line) } if (line && line.search(regEx2) >= 0) { result.push(line) } if (line && line.search(regEx3) >= 0) { result.push(line) } }); rl.on('close', function () { console.log('finished search', result) resolve(result) }); }) } searchStream('base_output', str1, str2, str3);