SORU
27 Mayıs 2011, Cuma


Bir node.js bir defada bir satır dosya okuma?

2015 güncelleştirinStabil ve virüssüz haline gelen da 0,12 Düğümü doğal yolu Dan Dascalescu's answer gör - Düğüm 4.0 mevcuttur.


2014 güncelleştirme: özgün cevap akışı http://strongloop.com/strongblog/practical-examples-of-the-new-node-js-streams-api/ dönüşüm yeni ateşli bir itiraz (yorumları oku) görünüşte gibi görünüyor.


Bir anda büyük dosya tek bir satırı okumak için çalışıyorum. Konuyu ele Quora bir soru buldum ama bazı bağlantılar her şeyi birbirine uygun yapmak için kaçırıyorum. (Quora cevap link: 10**)

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

Anlamak istediğim, bu örnekteki gibi STDİN yerine bir dosyadan bir defada bir satır okurum diye.

Denedim:

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

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

ama işe yaramıyor. Bir tutam PHP gibi bir şey kullanarak tekrar aşık olabileceğimi biliyorum, ama bunu çözmek istiyorum.

Diğer cevap dosyası için bellek var koşuyorum sunucu çok daha büyük olduğu için işe yarayacağını sanmıyorum.

EDİT Raynos tarafından sunulan test çözümü aşağıda:

var     lazy    = require("lazy"),
        fs  = require("fs");

 new lazy(fs.createReadStream('./MyVeryBigFile.csv'))
     .lines
     .forEach(function(line){
         console.log(line.toString());
     }
 );

CEVAP
21 Mart 2013, PERŞEMBE


Böyle basit bir işlem için üçüncü parti modüller üzerinde herhangi bir bağımlılık olmamalı. Kolay.

var fs = require('fs'),
    readline = require('readline');

var rd = readline.createInterface({
    input: fs.createReadStream('/path/to/file'),
    output: process.stdout,
    terminal: false
});

rd.on('line', function(line) {
    console.log(line);
});

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Gavin Hoey

    Gavin Hoey

    21 Aralık 2007
  • kimaliz

    kimaliz

    18 Temmuz 2006
  • ravinderosahn

    ravinderosah

    20 Temmuz 2009