Dans Go, le package bufio.Scanner fournit un moyen pratique de lire des fichiers ligne par ligne. Cependant, par défaut, Scanner ne propose pas de méthode pour ignorer ou lire un numéro de ligne spécifique. Pour y parvenir, nous devons modifier le comportement par défaut du scanner.
Nous pouvons étendre le scanner en créant une fonction de division personnalisée qui détermine les limites des lignes et maintient la position du fichier. Définissons une fonction de fractionnement qui renvoie l'avance en octets jusqu'au prochain saut de ligne et la ligne comme jeton :
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 }
Ensuite, nous pouvons utiliser la méthode Scanner.Split pour définir notre fonction de fractionnement personnalisée :
scanner := bufio.NewScanner(inputFile) scanner.Split(scanLinesWithPosition)
Avec la fonction de division personnalisée en place, nous pouvons lire les lignes tout en conservant la position du fichier. Voici une version modifiée de votre code existant :
// ... (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) }
Maintenant, le code lit les lignes, saute les lignes déjà traitées (en fonction de la variable de progression) et conserve le numéro de ligne actuel. En ajustant la valeur de progression, vous pouvez contrôler le numéro de la ligne de départ.
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!