web-dev-qa-db-de.com

Einfügen einer variablen Anzahl von Leerzeichen in eine Zeichenfolge? (Formatieren einer Ausgabedatei)

Okay, ich nehme Daten aus einer Liste, mit der ich eine DataGridView befülle, und exportiere sie in eine Textdatei. Ich habe bereits die Funktion zum Exportieren in eine CSV ausgeführt und möchte auch eine Nur-Text-Version erstellen.

Da die Länge der Titel und anderer Elemente unterschiedlich ist, sieht es beim Speichern und anschließenden Öffnen der Datei im Editor wie ein Durcheinander aus, da nichts ansteht.

Ich möchte, dass die Ausgabe so aussieht:

Sample Title One   Element One   Whatever Else
Sample Title 2     Element 2     Whatever Else
S. T. 3            E3            Whatever Else

Ich nehme an, dass ich jedes der Elemente durchlaufen kann, um die Länge des längsten Elements zu ermitteln, damit ich berechnen kann, wie viele Leerzeichen zu jedem der verbleibenden Elemente hinzugefügt werden müssen.

Meine Hauptfrage lautet: Gibt es eine elegante Möglichkeit, einer Zeichenfolge eine variable Anzahl von Zeichen hinzuzufügen? Es wäre schön, wenn Sie Folgendes hätten: myString.insert(index, charToInsert, howManyToInsert);

Natürlich kann ich einfach eine Funktion schreiben, um dies über eine Schleife zu tun, aber ich wollte sehen, ob es einen besseren Weg gibt, dies zu tun.

Danke im Voraus!

-Sootah

52
Sootah

Dafür möchten Sie wahrscheinlich myString.PadRight(totalLength, charToInsert).

Weitere Informationen finden Sie unter String.PadRight-Methode (Int32) .

101
Gabe

Verwenden Sie String.Format() oder TextWriter.Format() (je nachdem, wie Sie tatsächlich in die Datei schreiben) und geben Sie die Breite eines Felds an.

String.Format("{0,20}{1,15}{2,15}", "Sample Title One", "Element One", "Whatever Else");

Sie können die Breite eines Feldes auch in interpolierten Zeichenfolgen angeben:

$"{"Sample Title One",20}{"Element One",15}{"Whatever Else",15}"

Und damit Sie es wissen, können Sie mit dem entsprechenden String-Konstruktor eine Folge sich wiederholender Zeichen erstellen.

new String(' ', 20); // string of 20 spaces
41
Jeff Mercado

Verwenden 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);

Im Format {0,-20} bedeutet, dass das erste Argument eine feste Länge von 20 hat und das negative Vorzeichen garantiert, dass die Zeichenfolge von links nach rechts gedruckt wird.

3
Cheng Chen

Hier sind die Funktionen, die ich geschrieben habe, bevor ich das .PadRight-Bit hatte:

    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";
    }
2
Sootah

Ich bin mit Justin einverstanden und die WhiteSpace-CHAR kann mit ASCII-Codes hier referenziert werden :

string.Empty.PadRight(totalLength, (char)32);

Ein alternativer Ansatz: Erstellen Sie alle Leerzeichen manuell in einer benutzerdefinierten Methode und rufen Sie sie auf:

private static string GetSpaces(int totalLength)
    {
        string result = string.Empty;
        for (int i = 0; i < totalLength; i++)
        {
            result += " ";
        }
        return result;
    }

Rufen Sie es in Ihrem Code auf, um Leerzeichen zu erstellen: GetSpaces (14);

0
Davood Rokni