Разработка под linux / подсказка к 5 задачке

Создаем простой проект, который позволяет обработать входной поток данных и как-нибудь на него отреагировать.

И так, пишем:

mkdir ~/projects/processStream
cd "$_"
dotnet new console

получаем

теперь откроем файлик Program.cs и загоним в него такой код

using System;

namespace project02
{
    class Program
    {
        static void Main(string[] args)
        {
            var input = ""; // переменная под текущий входной поток
            while(true) {
                input = Console.ReadLine(); // читаем из потока
                if (String.IsNullOrEmpty(input)) { // если поток пуст
                    break; // то выходим из цикла
                } else {
                    Console.WriteLine(input); // а если не пуст, то пишем в ответ тоже что нам отправили
                }
            }
            Console.WriteLine("done"); // в конце просто пишем done
        }
    }
}

в принципе тут ничего сложно нет, можно использовать как обыкновенное консольное приложение.

Давайте его запустим:

намного интереснее становится, когда вы используете такое приложение вместе с каким-то другим приложением которое может генерировать поток данных. Например, такое которое мы делали в предыдущем задании.

Либо можно использовать какое-нибудь уже встроенное в linux

Например, есть утилита seq которая позволяет генерить последовательности чисел, работает примерно так:

так вот, мы можем использовать результат генерации этой утилиты как входной поток данных для другой утилиты. Для этого используется так называемый stream-оператор |

Используют его так. Вы пишите сначала команду которая генерирует поток, а затем команду которая обрабатывает поток:

тут не очень наглядно, давайте сделаем чтобы наша программа выводила квадраты чисел. Правим:

static void Main(string[] args)
{
    var input = "";
    while(true) {
        input = Console.ReadLine();
        if (String.IsNullOrEmpty(input)) {
            break;
        }
        // преобразую в число
        var value = int.Parse(input);
        Console.WriteLine(value * value); // вывожу квадрат
    }
    Console.WriteLine("done");
}

запускаем

о, уже интереснее причем заметьте, что входные значение не видны, видны только преобразованные.

Кстати оператор можно использовать несколько раз. Например:

У нас тут уже получается возведение в четвертую степень.

Но правда еще и ошибка появляется, но это потому что мы выводим done в конце, а оно в число не преобразовывается.

Ну для этого можно убрать этот done, в общем не будем на этом останавливаться.

Еще в linux есть прикольная абсолютно бесполезная утилита, которая позволяет вывести результат работы функции как мысли коровы. Называется она cowsay. Устанавливается вот так

sudo apt install cowsay

зато потом вы можете делать так

вообще там не только корову можно использовать можно дракона с коровой

полный список зверей можно получить через cowsay -l который кстати тоже можно передать в качестве текста самой команду cowsay

выглядит прикольно плюс так как эта утилита работает с входным потоком то она вполне подойдет под нашу задачу.

2.5

Написать программу, которая сможет обработать данные из предыдущего задания используя оператор потока в соответствии с заданием.

Используя второй оператор потока передать результат работы функции утилите cowsay

выбрать вариант