Tengo un archivo txt con alrededor de 5000 líneas, me gustaría imprimir una línea aleatoria de ese archivo. Intenté usar readline pero no puedo averiguar cómo elegir qué línea imprimir usando números enteros. ¿Cuál sería la forma más rápida de hacer esto sin usar mucha memoria?
Aquí está mi código
const readline = require("readline"); const fs = require("fs"); const file = readline.createInterface({ input: fs.createReadStream('file.txt'), output: process.stdout, terminal: false }); file.on('line', (line) => { console.log(line); })La solución directa sería:
Pero podría usar bastante memoria si su archivo es realmente grande.
así que sin leer todo el archivo, en la parte superior de mi cabeza: tal vez busque una posición aleatoria, luego lea hasta que presione \n, y luego vuelva a leer hasta \n, luego divida por \n y elija la parte media de la matriz ?
Nota: esto se romperá si la última línea no es seguida por una nueva línea. (si la posición aleatoria está en las dos últimas líneas)
dos enfoques aquí:
const readline = require("readline"); const fs = require("fs"); const file = readline.createInterface({ input: fs.createReadStream('file.txt'), output: process.stdout, terminal: false }); const radnomLineNumber = getRandomInt(5000); let i = 0; file.on('line', (line) => { if (randomLineNumber === i) { console.log(line); return; } i++; });