Lecture d'un fichier à partir d'un numéro de ligne spécifique à l'aide d'un scanner
Dans Go, vous pouvez utiliser un bufio.Scanner pour lire une ligne de fichier par ligne. Cependant, bufio.Scanner ne fournit pas d'option intégrée pour commencer la lecture à partir d'un numéro de ligne spécifique.
Voici un moyen d'étendre bufio.Scanner avec un SplitFunc personnalisé qui vous permet de sauter des lignes et de commencer à lire à partir de un numéro de ligne souhaité :
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 }
Cette fonction prend un io.ReadSeeker (comme un fichier) et un numéro de ligne de départ, et renvoie un bufio.Scanner qui saute des lignes jusqu'à ce que le numéro de ligne de départ soit atteint.
Pour utiliser ce bufio.Scanner étendu, vous pouvez suivre ces étapes :
Voici un exemple :
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()) }
Ce code lira les lignes du fichier "input.txt" à partir de la ligne 5.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!