Eine Datei ab einer bestimmten Zeilennummer mit dem Scanner lesen
In Go können Sie einen bufio.Scanner verwenden, um eine Dateizeile zu lesen nach Zeile. bufio.Scanner bietet jedoch keine integrierte Option, um mit dem Lesen ab einer bestimmten Zeilennummer zu beginnen.
Hier ist eine Möglichkeit, bufio.Scanner mit einem benutzerdefinierten SplitFunc zu erweitern, mit dem Sie Zeilen überspringen und mit dem Lesen beginnen können eine gewünschte Zeilennummer:
func scannerWithStartLine(input io.ReadSeeker, start int64) (*bufio.Scanner, error) { if _, err := input.Seek(start, 0); err != nil { return nil, err } scanner := bufio.NewScanner(input) scanner.Split(func(data []byte, atEOF bool) (n int, err error) { if atEOF && len(data) == 0 { return 0, io.EOF } for i := 0; i < len(data); i++ { if data[i] == '\n' { return i + 1, nil } } return 0, nil }) return scanner, nil }
Diese Funktion nimmt einen io.ReadSeeker (z. B. eine Datei) und eine Startzeilennummer und gibt einen bufio.Scanner zurück, der Zeilen überspringt, bis die Startzeilennummer erreicht ist.
Um diesen erweiterten bufio.Scanner zu verwenden, können Sie die folgenden Schritte ausführen:
Hier ist ein Beispiel:
file, err := os.Open("input.txt") if err != nil { // Handle error } startLine := 5 scanner, err := scannerWithStartLine(file, startLine) if err != nil { // Handle error } for scanner.Scan() { fmt.Println(scanner.Text()) }
Dieser Code liest die Zeilen der Datei „input.txt“ ab Zeile 5.
Das obige ist der detaillierte Inhalt vonWie lese ich eine Datei ab einer bestimmten Zeilennummer mit bufio.Scanner in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!