2010-06-04 38 views
26

Có cách nào mát mẻ để có một cái gì đó như thế này:Định dạng một chuỗi thành các cột

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

và định dạng nó để một cái gì đó như thế này:

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

Sử dụng các lệnh định dạng chuỗi?

Tôi không quá hung hăng về những việc cần làm nếu một thời gian rất dài. Ví dụ này sẽ là ok bởi tôi:

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

Để cung cấp một số ngữ cảnh. Tôi có một hộp thả xuống hiển thị thông tin rất giống với điều này. Ngay bây giờ mã của tôi để tạo mục trong menu thả xuống trông giống như sau:

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

Tôi đang tìm cách định dạng tốt hơn. Bất kỳ ý tưởng?


Đây là những gì tôi đã kết thúc với:

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

Các HtmlDecode thay đổi   đến một không gian có thể chịu được không gian loại bỏ định dạng của danh sách thả xuống.

Trả lời

54

Bạn có thể chỉ định số cột bị chiếm đóng bởi các văn bản cũng như sự liên kết sử dụng Console.WriteLine hoặc sử dụng String.Format:

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

Số xác định số cột mà bạn muốn sử dụng và các dấu hiệu chỉ rõ sự liên kết (- để căn trái, + để căn chỉnh phải). Vì vậy, nếu bạn biết số lượng cột có sẵn, bạn có thể viết ví dụ như thế này:

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

Nếu bạn muốn tính số cột dựa trên toàn bộ danh sách (ví dụ: tên dài nhất), sau đó bạn sẽ cần phải nhận được số đó trước và chuyển nó như một tham số cho DropDownDisplay của bạn - không có cách nào để làm điều này tự động.

+0

Câu trả lời hay! Tôi nghĩ rằng nó hoạt động, nhưng vì lý do nào đó, khi xem thả xuống, nó không hoạt động. Tôi đoán một cái gì đó là loại bỏ các không gian thêm. :( – Vaccano

+0

Tôi cần tìm một số cách để chèn   thay vì khoảng trắng – Vaccano

+1

nếu bạn cần sử dụng  , chỉ cần thực hiện một chuỗi.Đặt sau định dạng. Return String.Format ("{0, -10} - {1 , -10}, {2, 10} - {3,5} "), Tên, Thành phố, Tiểu bang, ID) .Replace (" ","   "); –

0

Ngoài câu trả lời của Tomas, tôi chỉ muốn chỉ ra rằng nội suy chuỗi có thể được sử dụng trong C# 6 hoặc mới hơn.

// 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}"; 
Các vấn đề liên quan