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
Libérer: 2024-11-06 02:41:02
original
732 Les gens l'ont consulté

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
}
Copier après la connexion

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())
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal