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

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

王林
Libérer: 2024-02-05 23:00:04
avant
726 Les gens l'ont consulté

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();
Copier après la connexion

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 
 }
Copier après la connexion

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>
Copier après la connexion

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');
});
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal