使用 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中文网其他相关文章!