Wie lese ich eine Textdatei Zeile für Zeile in Go, wenn einige Zeilen lang genug sind, um Fehler "bufio.Scanner: Token zu lang" zu verursachen?

10

Ich habe eine Textdatei, in der jede Zeile ein JSON-Objekt darstellt. Ich verarbeite diese Datei in Go mit einer einfachen for -Schleife wie folgt:

%Vor%

Wenn dieser Code eine Zeile mit einer besonders großen JSON-Zeichenfolge (~ 67kb) erreicht, erhalte ich die Fehlermeldung "bufio.Scanner: Token zu lang".

Gibt es eine einfache Möglichkeit, die maximale Zeilengröße zu erhöhen, die von NewScanner lesbar ist? Oder gibt es einen anderen Ansatz, den Sie insgesamt durchführen können, wenn Sie Zeilen lesen müssen, die für NewScanner zu groß sind, aber im Allgemeinen keine unsichere Größe aufweisen?

    
Steve Perkins 14.01.2014, 21:24
quelle

3 Antworten

13

Von den Paketdokumenten :

  

Programme, die mehr Kontrolle über Fehlerbehandlung oder große Token benötigen,   oder müssen sequentielle Scans auf einem Reader ausführen, sollte bufio.Reader verwenden   stattdessen.

Es sieht so aus, als wäre die bevorzugte Lösung bufio.Reader.ReadLine.

    
Peter Milley 14.01.2014, 21:29
quelle
6

Sie können auch Folgendes tun:

%Vor%

Das zweite Argument von scanner.Buffer () legt die maximale Tokengröße fest. Im obigen Beispiel können Sie die Datei scannen, solange keine Zeile größer als 1 MB ist.

    
lorserker 26.05.2016 08:28
quelle
3

Sie wollen sicherlich nicht Zeile für Zeile lesen. Warum tust du das nicht einfach:

%Vor%     
Dustin 15.01.2014 06:02
quelle

Tags und Links