Maison >développement back-end >Golang >Comment lire un fichier à partir d'un numéro de ligne spécifique à l'aide du scanner dans Go ?

Comment lire un fichier à partir d'un numéro de ligne spécifique à l'aide du scanner dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-06 15:03:03880parcourir

How to Read a File from a Specific Line Number Using Scanner in Go?

Lecture d'un fichier à partir d'un numéro de ligne spécifique à l'aide du scanner

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.

Solution étendue avec fonction de séparation de jetons personnalisée

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)

Gestion de la position de la ligne

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn