ultimo - C#- Insertar un número variable de espacios en una cadena?(Formateando un archivo de salida)
recortar string c# (4)
Para esto, probablemente quieras myString.PadRight(totalLength, charToInsert)
.
Consulte el método String.PadRight (Int32) para obtener más información.
De acuerdo, estoy tomando datos de una lista con la que llené un DataGridView y lo exportaré a un archivo de texto. Ya he hecho la función para exportarlo a un CSV, y me gustaría hacer una versión de texto sin formato también.
Debido a que los Títulos y otros elementos son de longitud variable, cuando el archivo se guarda y luego se abre en el Bloc de notas parece un desastre porque nada se alinea.
Me gustaría que el resultado fuera así:
Sample Title One Element One Whatever Else
Sample Title 2 Element 2 Whatever Else
S. T. 3 E3 Whatever Else
Me imagino que puedo recorrer cada uno de los elementos para obtener la longitud de uno más largo, así puedo calcular cuántos espacios agregar a cada elemento restante.
Mi pregunta principal es: ¿hay una forma elegante de agregar una cantidad variable de caracteres en una cadena? Sería bueno tener algo como: myString.insert(index, charToInsert, howManyToInsert);
Por supuesto, obviamente puedo escribir una función para hacer esto a través de un bucle, pero quería ver si había una mejor manera de hacerlo.
¡Gracias por adelantado!
-Sootah
Solo por las patadas, aquí están las funciones que escribí para hacerlo antes de tener el bit .PadRight:
public string insertSpacesAtEnd(string input, int longest)
{
string output = input;
string spaces = "";
int inputLength = input.Length;
int numToInsert = longest - inputLength;
for (int i = 0; i < numToInsert; i++)
{
spaces += " ";
}
output += spaces;
return output;
}
public int findLongest(List<Results> theList)
{
int longest = 0;
for (int i = 0; i < theList.Count; i++)
{
if (longest < theList[i].title.Length)
longest = theList[i].title.Length;
}
return longest;
}
////Usage////
for (int i = 0; i < storageList.Count; i++)
{
output += insertSpacesAtEnd(storageList[i].title, longest + 5) + storageList[i].rank.Trim() + " " + storageList[i].term.Trim() + " " + storageList[i].name + "/r/n";
}
Use String.Format()
o TextWriter.Format()
(dependiendo de cómo escriba realmente en el archivo) y especifique el ancho de un campo.
String.Format("{0,20}{1,15}{2,15}", "Sample Title One", "Element One", "Whatever Else");
También puede especificar el ancho de un campo dentro de cadenas interpoladas:
$"{"Sample Title One",20}{"Element One",15}{"Whatever Else",15}"
Y para que lo sepas, puedes crear una cadena de caracteres repetidos usando el contructor de cadena apropiado.
new String('' '', 20); // string of 20 spaces
Use String.Format
:
string title1 = "Sample Title One";
string element1 = "Element One";
string format = "{0,-20} {1,-10}";
string result = string.Format(format, title1, element1);
//or you can print to Console directly with
//Console.WriteLine(format, title1, element1);
En el formato {0,-20}
significa que el primer argumento tiene una longitud fija 20, y el signo negativo garantiza que la cadena se imprima de izquierda a derecha.