nodejs Synchronisation große Datei zeilenweise lesen?

8

Ich habe eine große Datei (utf8). Ich weiß, dass fs.createReadStream einen Stream erstellen kann, um eine große Datei zu lesen, aber nicht synchronisiert. Also versuche ich fs.readSync zu verwenden, aber gelesener Text ist gebrochen wie "迈�" .

%Vor%     
nroe 25.09.2011, 11:11
quelle

5 Antworten

9

Bei großen Dateien kann readFileSync unpraktisch sein, da die gesamte Datei in den Speicher geladen wird. Ein anderer synchroner Ansatz besteht darin, iterativ readSync aufzurufen, kleine Datenbits gleichzeitig zu lesen und die Zeilen so zu verarbeiten, wie sie kommen. Das folgende Codebeispiel implementiert diesen Ansatz und verarbeitet synchron jeweils eine Zeile aus der Datei 'test.txt':

%Vor%     
JB Krohn 19.01.2014 16:30
quelle
7

verwenden Ссылка

%Vor%     
Divam Gupta 22.12.2015 13:12
quelle
4

Verwenden Sie readFileSync :

  

fs.readFileSync (Dateiname, [encoding]) Synchrone Version von   fs.readFile. Gibt den Inhalt des Dateinamens zurück.

     

Wenn Codierung angegeben wird, gibt diese Funktion eine Zeichenfolge zurück.   Andernfalls wird ein Puffer zurückgegeben.

Nebenbei: Da Sie einen Knoten verwenden, würde ich die Verwendung von asynchronen Funktionen empfehlen.

    
Tom 25.09.2011 11:17
quelle
2

Ich habe eine einfachere Version von JB Kohns Antwort erstellt, die split () im Puffer verwendet. Es funktioniert mit den größeren Dateien, die ich ausprobiert habe.

%Vor%     
srkleiman 09.09.2016 14:06
quelle
1

zwei mögliche Probleme,

  1. 3bytes BOM am Anfang haben Sie
  2. nicht übersprungen
  3. die ersten 4 Bytes können nicht gut zu UTF8-Zeichen formatiert werden (utf8 ist keine feste Länge)
user943702 25.09.2011 13:06
quelle