2016-05-06 17 views
0

Kein Duplikat von Read a file one line at a time in node.js?.So lesen Sie eine Datei Zeile für Zeile Zeile für Zeile:

Alle Beispiele im anderen Thread beantworten das Lesen einer Datei Zeile für Zeile. Aber keiner von ihnen konzentriert sich auf das Lesen einer Datei Zeile für Zeile Zeile für Zeile.

Zur Veranschaulichung habe ich Code aus den accepted answer in dem anderen Thread angepasst:

let index = 0; 

const rl = readline.createInterface({ 
    input: fs.createReadStream(path.resolve(__dirname, './countries.txt')) 
}); 

rl.on('line',() => { 
    console.log('line', ++index); 

    rl.pause(); 
}); 

auf der Geschwindigkeit der Maschine je den Code ausgeführt wird, wird der Ausgang dieses Programm läuft etwas entlang der Linien von seinem :

line 1 
line 2 
line 3 
line 4 
line 5 
line 6 
line 7 
line 8 
... 
line 564 
line 565 
line 566 
line 567 

Wie einzeilige-at-a-time eine Datei Zeile-für-Zeile lesen?

Um die Absicht der Verwendung von rl.pause in dem Beispiel zu betonen: Ich muss 1 Zeile aus einer Datei abrufen und das weitere Lesen der Datei anhalten, bis ich explizit die zweite Zeile anfordern.

+0

Keine Antwort, aber ich habe festgestellt, dass https://github.com/nickewing/line-reader#usage die Schnittstelle abstrahiert, um eine Datei Zeile für Zeile zu lesen. – Gajus

Antwort

2

Ich verstehe nicht wirklich, warum Sie Readline-Schnittstelle verwenden, um eine Datei zu lesen.

Ich schlage vor, Sie split, wie

var splitstream = fs.createReadStream(file).pipe(split()) 
    splitstream 
    .on('data', function (line) { 
     //each chunk now is a seperate line! 
     splitstream.pause(); 
     setTimeout(function(){ splitstream.resume() }, 500); 
    }) 

verwenden Sie auf jeden Fall eine Zeile zu einem Zeitpunkt bekommen.

** für den Kommentar bearbeitet.

+0

Ich brauche eine Zeile aus einer Datei und stoppe die weitere Verarbeitung, bis ich explizit nach einer neuen Zeile frage. – Gajus

+0

Sie können den Stream anhalten und fortsetzen, wenn Sie dies benötigen. –

+0

Sie haben Recht. Was ist der Zweck von 'readline'? – Gajus

0

Hier ist, wie Sie Datei zeilenweise lesen und eine Zeile vor dem Lesen der nächsten Zeile verarbeiten können.

var fs=require('fs'); 
var readable = fs.createReadStream("data.txt", { 
    encoding: 'utf8', 
    fd: null 
}); 
var lines=[];//this is array not a string!!! 
readable.on('readable', function() { 
    var chunk,tmp=''; 
    while (null !== (chunk = readable.read(1))) { 
    if(chunk==='\n'){ 
     tmp=''; 
     lines.push(tmp); 
    // here tmp is containing a line you can process it right here. 
    // As i am just pushing the line in the array lines. 
    // use async if you are processing it asynchronously. 
    }else 
     tmp+=chunk; 
    } 
}); 
readable.on('end',function(){ 
    var i=0,len=lines.length; 
    while(i<len) 
    console.log(lines[i++]); 
}); 
Verwandte Themen