Heim  >  Artikel  >  Backend-Entwicklung  >  Wie lese ich eine Datei ab einer bestimmten Zeilennummer mit bufio.Scanner in Go?

Wie lese ich eine Datei ab einer bestimmten Zeilennummer mit bufio.Scanner in Go?

Susan Sarandon
Susan SarandonOriginal
2024-11-06 02:41:02667Durchsuche

How to Read a File Starting from a Specific Line Number Using bufio.Scanner in Go?

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:

  1. Öffnen Sie die Datei und legen Sie die Startzeilennummer fest.
  2. Erstellen Sie einen bufio.Scanner unter Verwendung der Funktion „scannerWithStartLine“.
  3. Rufen Sie scanner.Scan() auf, um Zeilen aus der Datei zu lesen, beginnend mit der angegebenen Zeilennummer.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn