Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Membaca fail satu baris pada satu masa dalam node.js?

Membaca fail satu baris pada satu masa dalam node.js?

王林
王林ke hadapan
2024-02-05 23:00:04636semak imbas

Membaca fail satu baris pada satu masa dalam node.js?

Kandungan soalan

Saya cuba membaca fail besar satu baris pada satu masa. Saya menjumpai soalan di Quora yang merangkumi topik ini, tetapi saya kehilangan beberapa sambungan untuk menjadikan semuanya bersatu.

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

Apa yang saya cuba fikirkan ialah cara membaca daripada fail satu baris pada satu masa, dan bukannya membaca daripada STDIN seperti dalam contoh ini.

Saya cuba:

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

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

Tetapi ia tidak berkesan. Saya tahu dalam secubit saya boleh kembali kepada sesuatu seperti PHP, tetapi saya ingin memikirkan perkara ini.

Saya rasa jawapan yang lain tidak akan berfungsi kerana fail itu jauh lebih besar daripada memori pelayan yang saya gunakan.


Jawapan betul


Sejak Node.js v0.12 dan Node.js v4.0.0, terdapat modul teras readline yang stabil. Ini ialah cara paling mudah untuk membaca baris daripada fail tanpa sebarang modul luaran:

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

atau:

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

Baris terakhir dibaca dengan betul walaupun tanpa akhir n (setakat Node v0.12 atau lebih tinggi).

Kemas kini: Contoh ini telah ditambah pada dokumentasi API rasmi Node .

Atas ialah kandungan terperinci Membaca fail satu baris pada satu masa dalam node.js?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam