2010-06-04 5 views
26

¿Hay una manera fresca para tomar algo como esto:formato a una cadena en columnas

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

y darle formato a algo como esto:

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

Uso de los comandos de formato de cadena?

No estoy demasiado pendiente de qué hacer si uno es muy largo. Por ejemplo, esto estaría bien para mí:

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

Para proporcionar algo de contexto. Tengo un cuadro desplegable que muestra información muy similar a esto. En este momento, mi código para crear el elemento en el menú desplegable se ve así:

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

Estoy buscando una forma de formatear esto mejor. ¿Algunas ideas?


Esto es lo que terminó con:

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

El HtmlDecode cambia el   a un espacio que puede soportar el espacio quitando el formato de la lista desplegable.

Respuesta

54

Se puede especificar el número de columnas que ocupa el texto, así como la alineación utilizando Console.WriteLine o el uso de String.Format:

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

El número especifica el número de columnas que desea utilizar y el signo especifica la alineación (- para la alineación izquierda, + para la alineación a la derecha). Por lo tanto, si se conoce el número de columnas disponibles, se podría escribir, por ejemplo, algo como esto:

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

Si desea calcular el número de columnas en base a toda la lista (por ejemplo, el nombre más largo), entonces tendrá que obtener ese número por adelantado y pasarlo como un parámetro a su DropDownDisplay - no hay forma de hacerlo automáticamente.

+0

¡Buena respuesta! Creo que funciona, pero por alguna razón, cuando se ve el menú desplegable, no funciona. Supongo que algo está eliminando los espacios adicionales. :( – Vaccano

+0

Necesito encontrar una forma de insertar   en lugar de un espacio. – Vaccano

+1

si necesita usar  , solo haga una cadena.Replace después del formato. Return String.Format ("{0, -10} - {1 , -10}, {2, 10} - {3,5} "), Nombre, ciudad, estado, ID). Reemplazar (" ","   "); –

0

Además de la respuesta de Tomas solo quiero señalar que la interpolación de cadenas se puede usar en C# 6 o más reciente.

// 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}"; 
Cuestiones relacionadas