ホームページ  >  記事  >  バックエンド開発  >  Goのスキャナーを使用して特定の行番号からファイルを読み取る方法は?

Goのスキャナーを使用して特定の行番号からファイルを読み取る方法は?

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?

スキャナーを使用して特定の行番号からファイルを読み取る

Go では、bufio.Scanner パッケージを使用してファイルを 1 行ずつ読み取る便利な方法が提供されます。ただし、デフォルトでは、Scanner は特定の行番号をスキップしたり、そこから読み取る方法を提供しません。これを実現するには、スキャナーのデフォルトの動作を変更する必要があります。

カスタム トークン スプリッター関数を使用した拡張ソリューション

行の境界と境界を決定するカスタム分割関数を作成することで、スキャナーを拡張できます。ファイルの位置を維持します。次の改行までのバイト数とその行をトークンとして返す分割関数を定義しましょう:

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のスキャナーを使用して特定の行番号からファイルを読み取る方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。