Einführung
Das Line Filters Lab ist ein üblicher Programmtyp, der Eingaben von der Standardeingabe (stdin) liest, verarbeitet und dann einige abgeleitete Ergebnisse auf die Standardausgabe (stdout) ausgibt. Ziel dieses Labs ist es, ein Go-Programm zu schreiben, das Eingabetexte liest und sie gemäß bestimmten Anforderungen modifiziert.
Zeilenfilter
Das Problem, das in diesem Lab gelöst werden soll, ist es, ein Go-Programm zu schreiben, das Eingabetexte von der Standardeingabe (stdin) liest, alle Buchstaben im Text in Großbuchstaben umwandelt und dann den modifizierten Text auf die Standardausgabe (stdout) ausgibt.
- Das Programm muss Eingabetexte von der Standardeingabe lesen.
- Das Programm muss alle Buchstaben im Eingabetext in Großbuchstaben umwandeln.
- Das Programm muss den modifizierten Text auf die Standardausgabe ausgeben.
## Um unseren Zeilenfilter zu testen, erstellen wir zunächst eine Datei
## mit einigen Kleinbuchstabenzeilen.
$ echo 'hello' > /tmp/lines
$ echo 'filter' >> /tmp/lines
## Anschließend verwenden wir den Zeilenfilter, um Großbuchstabenzeilen zu erhalten.
$ cat /tmp/lines | go run line-filters.go
HELLO
FILTER
Hier ist der vollständige Code:
// Ein _Zeilenfilter_ ist ein üblicher Programmtyp, der Eingaben
// von der Standardeingabe liest, verarbeitet und dann einige
// abgeleitete Ergebnisse auf die Standardausgabe ausgibt. `grep` und `sed`
// sind häufige Zeilenfilter.
// Hier ist ein Beispiel für einen Zeilenfilter in Go, der eine
// großgeschriebene Version des gesamten Eingabetexts ausgibt.
// Sie können dieses Muster verwenden, um Ihre eigenen Go-Zeilenfilter zu schreiben.
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
// Das Umhüllen der unbufferten `os.Stdin` mit einem gepufferten
// Scanner gibt uns eine bequeme `Scan`-Methode, die den Scanner
// zum nächsten Token vorwärts bewegt; was in der Standardimplementierung
// der nächste Zeile ist.
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
// `Text` gibt das aktuelle Token, hier die nächste Zeile,
// aus der Eingabe zurück.
ucl := strings.ToUpper(scanner.Text())
// Schreibt die großgeschriebene Zeile aus.
fmt.Println(ucl)
}
// Überprüft auf Fehler während `Scan`. Dateiende wird
// erwartet und von `Scan` als Fehler nicht gemeldet.
if err := scanner.Err(); err!= nil {
fmt.Fprintln(os.Stderr, "error:", err)
os.Exit(1)
}
}
Zusammenfassung
Das Line Filters Lab erfordert das Schreiben eines Go-Programms, das Eingabetexte von der Standardeingabe (stdin) liest, alle Buchstaben im Text in Großbuchstaben umwandelt und dann den modifizierten Text auf die Standardausgabe (stdout) ausgibt. Dieses Lab ist eine ausgezeichnete Möglichkeit, um Go-Programme zu schreiben, die Eingabetexte lesen und modifizieren.