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

王林
Release: 2024-02-05 23:00:04
forward
683 people have browsed it

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();
Copy after login

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 
 }
Copy after login

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>
Copy after login

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

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!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template