首頁  >  文章  >  後端開發  >  如何在 Go 中使用 bufio.Scanner 從特定行號開始讀取檔案?

如何在 Go 中使用 bufio.Scanner 從特定行號開始讀取檔案?

Susan Sarandon
Susan Sarandon原創
2024-11-06 02:41:02667瀏覽

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

使用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,您可以按照以下步驟操作:

  1. 開啟檔案並設定起始行號。
  2. 建立一個 bufio.Scanner使用scannerWithStartLine函數。
  3. 呼叫scanner.Scan()從檔案讀取行,從指定的行號開始。

下面是一個範例:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn