首页  >  文章  >  后端开发  >  如何使用 Go 中的 Scanner 从特定行号读取文件?

如何使用 Go 中的 Scanner 从特定行号读取文件?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-06 15:03:03774浏览

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

使用 Scanner 从特定行号读取文件

在 Go 中,bufio.Scanner 包提供了一种便捷的方式逐行读取文件。但是,默认情况下,Scanner 不提供跳过或读取特定行号的方法。为此,我们需要修改 Scanner 的默认行为。

具有自定义令牌拆分器功能的扩展解决方案

我们可以通过创建自定义拆分函数来扩展 Scanner,该函数确定行边界和保持文件位置。让我们定义一个 split 函数,该函数以字节为单位返回到下一个换行符,并将该行作为标记:

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
}

接下来,我们可以使用 Scanner.Split 方法来设置自定义拆分器函数:

scanner := bufio.NewScanner(inputFile)
scanner.Split(scanLinesWithPosition)

处理行位置

使用自定义拆分功能,我们可以在维护文件的同时读取行 位置。这是现有代码的修改版本:

// ... (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)
}

现在,代码读取行,跳过已处理的行(基于进度变量),并维护当前行号。通过调整进度值,可以控制起始行号。

以上是如何使用 Go 中的 Scanner 从特定行号读取文件?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn