首页 > 后端开发 > Golang > 正文

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

Mary-Kate Olsen
发布: 2024-11-06 15:03:03
原创
782 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!