Ответ 1
Для этого вы, вероятно, хотите myString.PadRight(totalLength, charToInsert)
.
Подробнее см. String.PadRight Method (Int32).
Хорошо, я беру данные из списка, в который я заполняю DataGridView, и экспортирую его в текстовый файл. Я уже выполнил эту функцию, чтобы экспортировать ее в CSV, и хотел бы также сделать текстовую версию.
Поскольку титры и другие элементы имеют переменную длину, когда файл сохраняется, а затем открывается в Блокноте, это выглядит беспорядочно, потому что ничего не выстраивается.
Я бы хотел, чтобы результат выглядел следующим образом:
Sample Title One Element One Whatever Else
Sample Title 2 Element 2 Whatever Else
S. T. 3 E3 Whatever Else
Я полагаю, что я могу пройти через каждый из элементов, чтобы получить длину самого длинного, чтобы я мог подсчитать, сколько пробелов нужно добавить к каждому из оставшегося элемента.
Мой главный вопрос: Есть ли элегантный способ добавить переменное число символов в строку? Было бы неплохо иметь что-то вроде: myString.insert(index, charToInsert, howManyToInsert);
Конечно, я могу, очевидно, просто написать функцию, чтобы сделать это через цикл, но я хотел посмотреть, есть ли лучший способ сделать это.
Спасибо заранее!
-Sootah
Для этого вы, вероятно, хотите myString.PadRight(totalLength, charToInsert)
.
Подробнее см. String.PadRight Method (Int32).
Используйте String.Format()
или TextWriter.Format()
(в зависимости от того, как вы на самом деле пишете файл) и укажите ширину поля.
String.Format("{0,20}{1,15}{2,15}", "Sample Title One", "Element One", "Whatever Else");
Вы также можете указать ширину поля внутри интерполированных строк:
$"{"Sample Title One",20}{"Element One",15}{"Whatever Else",15}"
И только чтобы вы знали, вы можете создать строку повторяющихся символов с помощью соответствующего строкового контрмера.
new String(' ', 20); // string of 20 spaces
Используйте 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);
В формате {0,-20}
означает, что первый аргумент имеет фиксированную длину 20, а отрицательный знак гарантирует, что строка печатается слева направо.
Просто для пинков, здесь функции, которые я написал, чтобы сделать это, прежде чем у меня был бит .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";
}