Comment lire efficacement un fichier ligne par ligne dans GO
- Paquet et importations nécessaires
- Lecture ligne par ligne en go
- Code complet pour lire un fichier ligne par ligne en Go
-
Configurer le comportement du
Scanner
dans Go
Les entrées/sorties de fichiers, en particulier la lecture et l’écriture de fichiers, sont une fonctionnalité assez courante des langages de programmation. Souvent, vous devez lire un fichier ligne par ligne. GO fournit le paquet bufio
qui implémente essentiellement des I/O
bufférisées. Le bufio
fournit des types et des fonctions utiles, en particulier pour lire et écrire dans des fichiers texte.
Paquet et importations nécessaires
package main
import(
"fmt"
"bufio"
"log"
"os"
)
Nous aurons besoin de plusieurs importations de la GO bibliothèque standard:-
os
- pour une interface indépendante de la plate-forme vers les fonctionnalités du système d’exploitationfmt
- mise en œuvre d’une fonctionnalité d’E/S formatéelog
- paquet de journalisation standardbufio
- prend en charge les E/S en mémoire tampon
Lecture ligne par ligne en go
Avant de lire le fichier, il doit d’abord être ouvert à l’aide de la fonction os.Open()
qui retourne un type de pointeur vers le fichier. Le fichier test.txt
indiqué dans l’extrait de code doit exister au préalable (mettez le chemin d’accès à l’endroit où se trouve votre fichier).
La fonction bufio.NewScanner(file)
retourne un type de scanner qui a des fonctions qui permettent de lire le fichier.
Pour lire le fichier ligne par ligne, nous devons utiliser deux méthodes sur le nouveau Scanner
- Scan
, qui fait avancer le scanner vers le nouveau jeton (dans ce cas la nouvelle ligne) et Text
(ou Octet
) qui lit le jeton le plus récent qui a été généré lorsque Scan
a été appelé.
Si des erreurs ont été rencontrées lors de la lecture du fichier, elles peuvent être traitées par un appel à la méthode Err()
sur le nouveau Scanner
qui renverra la première erreur non End of File rencontrée par le Scanner
.
func main(){
// open the file
file, err := os.Open("test.txt")
//handle errors while opening
if err != nil {
log.Fatalf("Error when opening file: %s", err)
}
fileScanner := bufio.NewScanner(file)
// read line by line
for fileScanner.Scan() {
fmt.Println(fileScanner.Text())
}
// handle first encountered error while reading
if err := fileScanner.Err(); err != nil {
log.Fatalf("Error while reading file: %s", err)
}
file.Close()
}
Code complet pour lire un fichier ligne par ligne en Go
Le code complet dans main.go
pour lire un fichier ligne par ligne est fourni ci-dessous.
Vous devez taper:
$ go run main.go
pour exécuter le programme dans le terminal.
package main
import (
"bufio"
"fmt"
"log"
"os"
)
func main() {
// open the file
file, err := os.Open("test.txt")
//handle errors while opening
if err != nil {
log.Fatalf("Error when opening file: %s", err)
}
fileScanner := bufio.NewScanner(file)
// read line by line
for fileScanner.Scan() {
fmt.Println(fileScanner.Text())
}
// handle first encountered error while reading
if err := fileScanner.Err(); err != nil {
log.Fatalf("Error while reading file: %s", err)
}
file.Close()
}
Configurer le comportement du Scanner
dans Go
Le type Scanner
a une fonction Split
qui accepte une fonction SplitFunc
pour déterminer comment le scanner va diviser la tranche d’octets donnée. La fonction par défaut SplitFunc
est la fonction ScanLines
qui retourne chaque ligne du texte, dépouillée du marqueur de fin de ligne.
Par exemple, nous pourrions diviser en utilisant des mots comme indiqué dans le code ci-dessous,
scanner.Split(bufio.ScanWords) //configure how the scanner behaves