Форматировать строку в столбцы - PullRequest
36 голосов
/ 05 июня 2010

Есть ли классный способ взять что-то вроде этого:

Customer Name - City, State - ID
Bob Whiley - Howesville, TN - 322
Marley Winchester - Old Towne, CA - 5653

и отформатируйте его примерно так:

Customer Name     - City,       State - ID
Bob Whiley        - Howesville, TN    - 322
Marley Winchester - Old Towne,  CA    - 5653

Использование команд формата строки?

Я не слишком зациклен на том, что делать, если он очень длинный. Например, это было бы хорошо для меня:

Customer Name     - City,       State - ID
Bob Whiley        - Howesville, TN    - 322
Marley Winchester - Old Towne,  CA    - 5653
Super Town person - Long Town Name, WA- 45648 

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

public partial class CustomerDataContract
{
    public string DropDownDisplay
    {
        get
        {
             return  Name + " - " + City + ",  " + State + " - " + ID;
        }
    }
}

Я ищу способ лучше отформатировать это. Есть идеи?


Вот что я закончил:

HttpContext.Current.Server.HtmlDecode(
    String.Format("{0,-27} - {1,-15}, {2, 2} - {3,5}", 
    Name, City, State, ID)
    .Replace(" ", " "));

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

Ответы [ 2 ]

62 голосов
/ 05 июня 2010

Вы можете указать количество столбцов, занимаемых текстом, а также выравнивание, используя Console.WriteLine или String.Format:

// Prints "--123       --"
Console.WriteLine("--{0,-10}--", 123);
// Prints "--       123--"
Console.WriteLine("--{0,10}--", 123);

Число указывает число столбцов, которые вы хотите использовать, а знак указывает выравнивание (- для выравнивания по левому краю, + для выравнивания по правому краю). Итак, если вы знаете количество доступных столбцов, вы можете написать, например, что-то вроде этого:

public string DropDownDisplay { 
  get { 
    return String.Format("{0,-10} - {1,-10}, {2, 10} - {3,5}"),
      Name, City, State, ID);
  } 
} 

Если вы хотите рассчитать количество столбцов на основе всего списка (например, самое длинное имя), то вам нужно заранее получить это число и передать его в качестве параметра вашему DropDownDisplay - там нет способа сделать это автоматически.

1 голос
/ 09 марта 2018

В дополнение к ответу Томаса я просто хочу указать, что интерполяция строк может использоваться в C # 6 или новее.

// with string format
var columnHeaders1 = string.Format($"|{0,-30}|{1,-4}|{2,-15}|{3,-30}|{4,-30}|{5,-30}|{6,-30}", "ColumnA", "ColumnB", "ColumnC", "ColumnD", "ColumnE", "ColumnF", "ColumnG");

// with string interpolation
var columnHeaders2 = $"|{"ColumnA",-30}|{"ColumnB",-4}|{"ColumnC",-15}|{"ColumnD",-30}|{"ColumnE",-30}|{"ColumnF",-30}|{"ColumnG",-30}";
...