Фильтры линий
Задача, которую необходимо решить в данной лабораторной работе, - написать программу на Go, которая считывает входной текст из stdin, переводит все буквы в верхний регистр и затем выводит модифицированный текст в stdout.
- Программа должна считывать входной текст из stdin.
- Программа должна переводить все буквы в входном тексте в верхний регистр.
- Программа должна выводить модифицированный текст в stdout.
## Чтобы протестировать наш фильтр линий, сначала создайте файл с несколькими
## строчными строками.
$ echo 'hello' > /tmp/lines
$ echo 'filter' >> /tmp/lines
## Затем используйте фильтр линий, чтобы получить строки в верхнем регистре.
$ cat /tmp/lines | go run line-filters.go
HELLO
FILTER
Ниже представлен полный код:
// _Фильтр линий_ - это распространённый тип программы, которая считывает
// ввод с stdin, обрабатывает его и затем выводит некоторый
// полученный результат в stdout. `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)
}
}