Maison  >  Article  >  développement back-end  >  Lire un fichier une ligne à la fois dans node.js ?

Lire un fichier une ligne à la fois dans node.js ?

王林
王林avant
2024-02-05 23:00:04634parcourir

Lire un fichier une ligne à la fois dans node.js ?

Contenu de la question

J'essaie de lire un gros fichier une ligne à la fois. J'ai trouvé une question sur Quora couvrant ce sujet, mais il me manque quelques liens pour que le tout se mette en place.

var Lazy=require("lazy");
 new Lazy(process.stdin)
     .lines
     .forEach(
          function(line) { 
              console.log(line.toString()); 
          }
 );
 process.stdin.resume();

Ce que j'essaie de comprendre, c'est comment lire un fichier ligne par ligne, plutôt que de lire depuis STDIN comme dans cet exemple.

J'ai essayé :

fs.open('./VeryBigFile.csv', 'r', '0666', Process);

 function Process(err, fd) {
    if (err) throw err;
    // DO lazy read 
 }

Mais ça ne marche pas. Je sais qu'à la rigueur, je pourrais me rabattre sur quelque chose comme PHP, mais je veux comprendre cela.

Je pense que l'autre réponse ne fonctionnera pas car le fichier est beaucoup plus volumineux que la mémoire du serveur sur lequel je l'exécute.


Bonne réponse


Depuis Node.js v0.12 et Node.js v4.0.0, il existe un module principal readline stable. C'est le moyen le plus simple de lire les lignes d'un fichier sans aucun module externe :

<code>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
  // ('\r\n') 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`.
    console.log(`Line from file: ${line}`);
  }
}

processLineByLine();
</code>

ou :

var lineReader = require('readline').createInterface({
  input: require('fs').createReadStream('file.in')
});

lineReader.on('line', function (line) {
  console.log('Line from file:', line);
});

lineReader.on('close', function () {
    console.log('all done, son');
});

La dernière ligne est lue correctement même sans la finale n (à partir de Node v0.12 ou supérieur).

Mise à jour : Cet exemple a été ajouté à la documentation officielle de l'API de Node .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer