Подтвердить что ты не робот

С# - Вставить переменное количество пробелов в строку? (Форматирование выходного файла)

Хорошо, я беру данные из списка, в который я заполняю 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

4b9b3361

Ответ 1

Для этого вы, вероятно, хотите myString.PadRight(totalLength, charToInsert).

Подробнее см. String.PadRight Method (Int32).

Ответ 2

Используйте 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

Ответ 3

Используйте 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, а отрицательный знак гарантирует, что строка печатается слева направо.

Ответ 4

Просто для пинков, здесь функции, которые я написал, чтобы сделать это, прежде чем у меня был бит .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";
    }