44 lines
1.7 KiB
Go
44 lines
1.7 KiB
Go
// _Строковый фильтр_ - это типичный тип программы,
|
||
// которая читает входные данные в stdin, обрабатывает
|
||
// их и затем выводит некоторый производный результат в
|
||
// стандартный вывод. `grep` и `sed` - это обычные строковые
|
||
// фильтры.
|
||
|
||
// Вот пример строкового фильтра в Go, который записывает
|
||
// заглавную версию всего входного текста. Вы можете
|
||
// использовать этот шаблон для написания ваших собственных
|
||
// фильтров Go.
|
||
package main
|
||
|
||
import (
|
||
"bufio"
|
||
"fmt"
|
||
"os"
|
||
"strings"
|
||
)
|
||
|
||
func main() {
|
||
|
||
// Обертывание небуферизованного `os.Stdin` буферизованным
|
||
// сканером дает нам удобный метод сканирования `Scan`,
|
||
// который продвигает сканер к следующему токену; который
|
||
// является следующей строкой в сканере по умолчанию.
|
||
scanner := bufio.NewScanner(os.Stdin)
|
||
|
||
for scanner.Scan() {
|
||
// `Text` возвращает текущий токен, из ввода - на
|
||
// следующую строку.
|
||
ucl := strings.ToUpper(scanner.Text())
|
||
|
||
// Печатает в верхнем регистре.
|
||
fmt.Println(ucl)
|
||
}
|
||
|
||
// Проверяем ошибки для `Scan`. Ожидается конец файла,
|
||
// и он не сообщается методом `Scan` как ошибка.
|
||
if err := scanner.Err(); err != nil {
|
||
fmt.Fprintln(os.Stderr, "error:", err)
|
||
os.Exit(1)
|
||
}
|
||
}
|