Home  >  Article  >  Backend Development  >  Reading a file one line at a time in node.js?

Reading a file one line at a time in node.js?

王林
王林forward
2024-02-05 23:00:04636browse

Reading a file one line at a time in node.js?

Question content

I am trying to read a large file one line at a time. I found a question on Quora covering this topic, but I'm missing some connections to make the whole thing come together.

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

What I'm trying to figure out is how to read from a file one line at a time, rather than reading from STDIN like in this example.

I have tried before:

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

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

But it doesn't work. I know in a pinch I could fall back to something like PHP, but I want to figure this out.

I think the other answer won't work because the file is much larger than the memory of the server I'm running it on.


Correct answer


Since Node.js v0.12 and Node.js v4.0.0, there is a stable readline core module. This is the simplest way to read lines from a file without any external modules:

<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>

or:

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');
});

The last line is read correctly even without the final \n (starting with Node v0.12 or later).

UPDATE: This example has been added to Node's official API documentation.

The above is the detailed content of Reading a file one line at a time in node.js?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete