Ровная таблица в консоли

1403
07 января 2017, 12:13

Требуется вывести в консоли ровную таблицу. В данный момент решил это с помощью:

Console.Write("{0, -20}|", text);

Этим кодом я задал минимальное количество символов в столбце, но если символов будет >20 - всё сломается. Как обрезать вывод, если строка больше 20-ти символов?

Answer 1

В два приёма, разумеется.

Собрать все строки вывода, выяснить максимальную длину. На основе максимальной длины сформировать форматную строку. Выводить через неё.

В вашем случае вместо вывода у вас будет

var column1 = new List<string>();
column1.Add(text);

А когда все строки будут добавлены, то

var maxWidth = column1.Max(s => s.Length);
var formatString = string.Format("{{0, -{0}}}|", maxWidth);
foreach (var s in column1)
{
    Console.Write(formatString, s);
    // тут наверное остальные колонки
    Console.WriteLine();
}
Answer 2

Можно написать вспомогательный метод-расширения:

public static class StringHelper
{
    public static string Shorten(this string str, int value)
    {
        return
            value > 3 && str.Length > value ?
            str.Substring(0, value - 3) + "..." : str;
    }
}

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

Пример использования:

Console.Write("{0, -20} ",  text.Shorten(20));
Answer 3

Решил проблему таким образом:

if (element.Value.Length >= 20)
                    {
                        Console.Write("{0, -20}|", element.Value.Substring(0, 17) + "...");
                    }
                    else { 
                    Console.Write("{0, -20}|", element.Value);
                }

Спасибо @Ev_Hyper за помощь!

READ ALSO
Datagridview и столбец base64

Datagridview и столбец base64

Подскажите как в данном примере декодировать второй столбец (content) из base64 и вывести оба столбца в datagridview?

450
Преобразование массива типа int в тип char C#

Преобразование массива типа int в тип char C#

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

474
Проблемка с выборкой ASP.NET core, EF core (Include)

Проблемка с выборкой ASP.NET core, EF core (Include)

Доброго времени суток Помогите разобраться с проблемой, пожалуйста Есть база, скажем из 3 таблиц Event (скажем - Спорт, Кино, Концерты) Category(для...

526
Сериализация ObservableCollection

Сериализация ObservableCollection

Подскажите, как сериализовать класс с коллекцией вида ObservableCollection`?

462