Exemples pratiques d'utilisation du Bufio Scanner
Le bufio.Scanner en Golang est un outil polyvalent qui peut être appliqué à une grande variété de tâches de traitement d'entrée. Explorons quelques exemples pratiques pour démontrer ses capacités.
Lecture à partir d'un fichier
Un cas d'utilisation courant du bufio.Scanner est la lecture de données à partir d'un fichier. Cela peut être particulièrement utile lorsque vous travaillez avec de gros fichiers, car le mécanisme de mise en mémoire tampon (buffering) du bufio.Scanner peut aider à améliorer les performances.
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, _ := os.Open("input.txt")
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := scanner.Text()
fmt.Println(line)
}
if err := scanner.Err(); err!= nil {
fmt.Fprintln(os.Stderr, "error:", err)
}
}
Dans cet exemple, nous créons un bufio.Scanner qui lit à partir d'un fichier nommé "input.txt". La méthode scanner.Scan() est utilisée pour lire chaque ligne du fichier, et la méthode scanner.Text() récupère le contenu de la ligne actuelle.
Traitement des arguments de la ligne de commande
Le bufio.Scanner peut également être utilisé pour traiter les arguments de la ligne de commande, ce qui peut être utile pour construire des outils ou des scripts en ligne de commande.
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
arg := scanner.Text()
fmt.Println("Argument:", arg)
}
if err := scanner.Err(); err!= nil {
fmt.Fprintln(os.Stderr, "error:", err)
}
}
Dans cet exemple, le bufio.Scanner lit l'entrée à partir de l'entrée standard (os.Stdin), ce qui permet à l'utilisateur d'entrer des arguments de ligne de commande. Chaque argument est ensuite affiché sur la console.
Analyse de données délimitées
Le bufio.Scanner peut également être utilisé pour analyser des données délimitées par un caractère ou un motif spécifique, telles que des fichiers CSV ou tabulaires.
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
file, _ := os.Open("data.csv")
defer file.Close()
scanner := bufio.NewScanner(file)
scanner.Split(bufio.ScanLines)
for scanner.Scan() {
line := scanner.Text()
fields := strings.Split(line, ",")
fmt.Println("Fields:", fields)
}
if err := scanner.Err(); err!= nil {
fmt.Fprintln(os.Stderr, "error:", err)
}
}
Dans cet exemple, nous créons un bufio.Scanner qui lit à partir d'un fichier CSV nommé "data.csv". Nous configurons le scanner pour utiliser la fonction de division bufio.ScanLines, qui divise l'entrée en lignes individuelles. Ensuite, nous divisons chaque ligne par le caractère virgule pour extraire les champs individuels.
Ces exemples démontrent la polyvalence du bufio.Scanner et comment il peut être appliqué à diverses tâches de traitement d'entrée en Golang. En utilisant sa mise en mémoire tampon efficace et ses fonctions de division personnalisables, vous pouvez construire des solutions de traitement d'entrée robustes et performantes pour vos applications.