Практикум по С#: выравниваем текст по краю и по центру консоли
Выравнивание текста может оказаться совсем не тривиальной задачей, если имеешь дело с консолью. Разбираемся, как это работает в С#.
vlada_maestro / shutterstock
В инструментах C# для создания интерфейсов типа WPF, UWP или WinForms есть удобные встроенные функции форматирования текста. Но для консольных программ (редакторов, текстовых баннеров) или просто для вёрстки красивых текстовых интерфейсов эти функции придётся писать самому.
Одна из задач при форматировании текста — выравнивание. Может показаться, что это совсем просто, но зачастую выходит как в меме:
Давайте попробуем разобраться, как написать код на C# для выравнивания текста в консоли.
Работа с координатами текста
У каждого символа в консоли есть координаты по осям X и Y. Первый символ выводится в позицию с координатами [0, 0]. На рисунке она находится в верхнем левом углу.
Чтобы выровнять текст по краю или разместить его в центре, нужно передать в специальную функцию координаты вывода первого символа каждой строки. Рассчитать их по формулам:
- Центрирование по горизонтали: координата X = (ширина окна консоли / 2) — (длина выводимой строки / 2).
- Центрирование по вертикали: координата Y = (высота окна консоли / 2) — (количество строк / 2).
- Выравнивание по правому краю: координата X = ширина окна консоли — длина строки.
- Выравнивание по нижнему краю: координата Y = высота окна консоли — количество строк.
Код для выравнивания текста в консоли на C#
Чтобы получить координаты, нужно подставлять в формулы следующие значения:
Название в формуле | Значение в коде |
---|---|
ширина окна консоли | Console.WindowWidth |
высота окна консоли | Console.WindowHeight |
длина строки |
string text = "some text"; text.Length |
количество строк |
string[] lines = { "line 1", "line2" }; lines.Count |
Изменить положение курсора можно с помощью метода SetCursorPosition (int left, int top) класса Console.
Теперь остаётся проверить, всё ли работает правильно. Для этого напишем программу, которая выводит надписи по центру и в углах нашей консоли.
Смотрим вывод программы.
Обратите внимание: если текст занимает больше одной строки, то каждую строку нужно выравнивать отдельно.
Теперь снова смотрим вывод программы.
Мы заранее расставили разрывы строк в тексте. Но это можно сделать и автоматически, используя код:
Это быстрое решение, но у него есть серьёзный недостаток — такой текст невозможно читать, потому что мы не научили программу правильно переносить слова.
Чтобы это исправить, нужно немного переделать цикл. Теперь мы будем разбивать строки только в тех местах, где стоит пробел.
Отлично! Такой текст стало приятно читать.
Заключение
Почти для любой проблемы в программировании есть готовые решения, и для выравнивания текста в консоли — тоже. Главное — разобраться, как это работает. Как показывает практика, совсем не обязательно палить из пушки по воробьям подключать отдельную библиотеку, если нужна лишь пара функций.