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

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

王林
Lepaskan: 2024-02-05 23:00:04
ke hadapan
743 orang telah melayarinya

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();
Salin selepas log masuk

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 
 }
Salin selepas log masuk

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>
Salin selepas log masuk

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');
});
Salin selepas log masuk

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 Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan