Ejemplos Prácticos de Uso del Bufio Scanner
El bufio.Scanner
en Golang es una herramienta versátil que se puede aplicar a una amplia gama de tareas de procesamiento de entrada. Exploremos algunos ejemplos prácticos para demostrar sus capacidades.
Lectura desde un Archivo
Un caso de uso común del bufio.Scanner
es la lectura de datos desde un archivo. Esto puede ser especialmente útil cuando se trabaja con archivos grandes, ya que el mecanismo de almacenamiento en buffer del bufio.Scanner
puede ayudar a mejorar el rendimiento.
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)
}
}
En este ejemplo, creamos un bufio.Scanner
que lee desde un archivo llamado "input.txt". El método scanner.Scan()
se utiliza para leer cada línea del archivo, y el método scanner.Text()
recupera el contenido de la línea actual.
Procesamiento de Argumentos de Línea de Comandos
El bufio.Scanner
también se puede utilizar para procesar argumentos de línea de comandos, lo que puede ser útil para construir herramientas o scripts de línea de comandos.
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)
}
}
En este ejemplo, el bufio.Scanner
lee la entrada desde la entrada estándar (os.Stdin
), lo que permite al usuario ingresar argumentos de línea de comandos. Luego, cada argumento se imprime en la consola.
Análisis de Datos Delimitados
El bufio.Scanner
también se puede utilizar para analizar datos que están delimitados por un carácter o patrón específico, como archivos CSV o separados por tabulaciones.
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)
}
}
En este ejemplo, creamos un bufio.Scanner
que lee desde un archivo CSV llamado "data.csv". Configuramos el scanner para que use la función de división bufio.ScanLines
, que divide la entrada en líneas individuales. Luego, dividimos cada línea por el carácter coma para extraer los campos individuales.
Estos ejemplos demuestran la versatilidad del bufio.Scanner
y cómo se puede aplicar a una variedad de tareas de procesamiento de entrada en Golang. Al aprovechar su eficiente almacenamiento en buffer y sus funciones de división personalizables, puede construir soluciones de procesamiento de entrada robustas y con buen rendimiento para sus aplicaciones.