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

Mary-Kate Olsen
リリース: 2024-11-06 15:03:03
オリジナル
784 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!