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