Требуется вывести в консоли ровную таблицу. В данный момент решил это с помощью:
Console.Write("{0, -20}|", text);
Этим кодом я задал минимальное количество символов в столбце, но если символов будет >20 - всё сломается. Как обрезать вывод, если строка больше 20-ти символов?
В два приёма, разумеется.
Собрать все строки вывода, выяснить максимальную длину. На основе максимальной длины сформировать форматную строку. Выводить через неё.
В вашем случае вместо вывода у вас будет
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();
}
Можно написать вспомогательный метод-расширения:
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));
Решил проблему таким образом:
if (element.Value.Length >= 20)
{
Console.Write("{0, -20}|", element.Value.Substring(0, 17) + "...");
}
else {
Console.Write("{0, -20}|", element.Value);
}
Спасибо @Ev_Hyper за помощь!
Сборка персонального компьютера от Artline: умный выбор для современных пользователей