In Go bietet das bufio.Scanner-Paket eine praktische Möglichkeit, Dateien Zeile für Zeile zu lesen. Standardmäßig bietet der Scanner jedoch keine Methode zum Überspringen oder Lesen einer bestimmten Zeilennummer. Um dies zu erreichen, müssen wir das Standardverhalten des Scanners ändern.
Wir können den Scanner erweitern, indem wir eine benutzerdefinierte Split-Funktion erstellen, die die Liniengrenzen bestimmt und behält die Dateiposition bei. Definieren wir eine Teilungsfunktion, die den Fortschritt in Bytes zum nächsten Zeilenumbruch und die Zeile als Token zurückgibt:
func scanLinesWithPosition(data []byte, atEOF bool) (advance int, token []byte, err error) { advance, token, err = bufio.ScanLines(data, atEOF) return // Advance and Token are calculated }
Als nächstes können wir die Scanner.Split-Methode verwenden, um unsere benutzerdefinierte Teilerfunktion festzulegen:
scanner := bufio.NewScanner(inputFile) scanner.Split(scanLinesWithPosition)
Mit der benutzerdefinierten Teilungsfunktion können wir Zeilen lesen und gleichzeitig die Dateiposition beibehalten. Hier ist eine modifizierte Version Ihres vorhandenen Codes:
// ... (Code from your post) func main() { // ... (Code from your post) scanner := bufio.NewScanner(inputFile) scanner.Split(scanLinesWithPosition) var currentLine int for scanner.Scan() { currentLine++ if currentLine > progress { fmt.Println(scanner.Text()) } } // ... (Code from your post) }
Jetzt liest der Code Zeilen, überspringt bereits verarbeitete Zeilen (basierend auf der Fortschrittsvariablen) und behält die aktuelle Zeilennummer bei. Durch Anpassen des Fortschrittswerts können Sie die Startzeilennummer steuern.
Das obige ist der detaillierte Inhalt vonWie lese ich eine Datei mit einer bestimmten Zeilennummer mithilfe des Scanners in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!