Leer líneas en Go
bufio.Scanner recorre un reader línea por línea, y su error hay que revisarlo.
func countLines(input string) (int, int, error) {
scanner := bufio.NewScanner(strings.NewReader(input))
scanner.Buffer(make([]byte, 0, 64*1024), 1024*1024)
lines, words := 0, 0
for scanner.Scan() {
line := strings.TrimSpace(scanner.Text())
if line == "" {
continue
}
lines++
words += len(strings.Fields(line))
}
if err := scanner.Err(); err != nil {
return 0, 0, fmt.Errorf("scan: %w", err)
}
return lines, words, nil
}
Cómo funciona
Scandevuelve false al final o ante un error.Errdespués distingue entre los dos casos.Buffersube el límite para líneas muy largas.
Palabras clave y builtins usados aquí
bytecontinueerrorforfuncifintlenmakereturnstring
El intento, en números
- Líneas
- 18
- Caracteres a escribir
- 420
- Tokens
- 129
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 74 segundos.
Paso 1 de 3 en Archivos e IO; paso 6 de 26 en Biblioteca estándar y estructura del proyecto.