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 を使用するには、次の手順に従います。
次に例を示します。
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 サイトの他の関連記事を参照してください。