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

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

Susan Sarandon
Susan Sarandonoriginal
2024-11-06 02:41:02731parcourir

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

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 :

  1. Ouvrez le fichier et définissez le numéro de ligne de départ.
  2. Créez un bufio.Scanner en utilisant la fonction scannerWithStartLine.
  3. Appelez scanner.Scan() pour lire les lignes du fichier, en commençant par le numéro de ligne spécifié.

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!

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