使用Scanner 從特定行號開始讀取檔案
在Go 中,你可以使用bufio.Scanner 來讀取檔案行按行。但是,bufio.Scanner 不提供從特定行號開始讀取的內建選項。
這裡有一種使用自訂SplitFunc 來擴展bufio.Scanner 的方法,它允許您跳過行並從以下位置開始讀取所需的行號:
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 }
此函數接受io.ReadSeeker (例如檔案)和起始行號,並傳回bufio.Scanner ,該掃描器會跳過行直到到達起始行號。
要使用這個擴充的 bufio.Scanner,您可以按照以下步驟操作:
下面是一個範例:
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()) }
此程式碼將從檔案「input.txt」的第 5 行開始讀取各行。
以上是如何在 Go 中使用 bufio.Scanner 從特定行號開始讀取檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!