ホームページ > バックエンド開発 > Golang > Go で bufio.Scanner を使用して特定の行番号から始まるファイルを読み取る方法は?

Go で bufio.Scanner を使用して特定の行番号から始まるファイルを読み取る方法は?

Susan Sarandon
リリース: 2024-11-06 02:41:02
オリジナル
731 人が閲覧しました

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート