Ce face bufio.Scanner.Scan
Scan citește din sursă cât îi trebuie ca să găsească următoarea bucată, apoi o face disponibilă prin Text și Bytes. Returnează true dacă a găsit o bucată și false la final sau la eroare.
Se folosește aproape mereu ca o condiție de buclă: for s.Scan() { ... }. După ce a returnat false, apelurile următoare returnează tot false. Ultimul rând este găsit chiar dacă nu se termină cu \n.
Ce returnează
true dacă există o bucată nouă, altfel false.
Exemple
Exemplul 1: Bucla clasică
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
s := bufio.NewScanner(strings.NewReader("Ana 9\nMihai 7\nIoana 10"))
for s.Scan() {
fmt.Println("rând:", s.Text())
}
fmt.Println("mai e ceva?", s.Scan())
}
Rezultat
rând: Ana 9
rând: Mihai 7
rând: Ioana 10
mai e ceva? false
Exemplul 2: Doar primele rânduri
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
jurnal := "09:00 start\n09:01 conectat\n09:05 comanda 1\n09:07 comanda 2\n09:09 comanda 3\n"
s := bufio.NewScanner(strings.NewReader(jurnal))
for i := 0; i < 3 && s.Scan(); i++ {
fmt.Println(s.Text())
}
}
Rezultat
09:00 start
09:01 conectat
09:05 comanda 1
Exemplul 3: Rânduri citite de la tastatură
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
s := bufio.NewScanner(os.Stdin)
fmt.Println("Scrie orașe (rând gol = stop):")
var orase []string
for s.Scan() && s.Text() != "" {
orase = append(orase, s.Text())
}
fmt.Println("Ai scris:", strings.Join(orase, ", "))
}
Ce scrie utilizatorul (intrare)
Iași
Cluj
Oradea
acest rând nu mai e citit
Rezultat
Scrie orașe (rând gol = stop):
Ai scris: Iași, Cluj, Oradea
Greșeli frecvente
- Apelezi
Text()înainte de primulScan(). Rezultatul este gol. - Scrii
for s.Scan() == truesau verificiScande două ori pe iterație. Fiecare apel consumă o bucată.
Comenzi înrudite
bufio.NewScanner: Creează un bufio.Scanner, cel mai simplu mod de a citi un text rând cu rând (sau cuvânt cu cuvânt).bufio.Scanner.Text: Text returnează bucata curentă găsită de Scan, ca string; Bytes o returnează ca []byte, fără copiere.bufio.Scanner.Err: Returnează eroarea care a oprit scanarea, sau nil dacă s-a ajuns normal la sfârșitul datelor.