Ich habe eine interessante Frage. Stellen Sie sich vor, ich habe viele Daten, die sich in sehr schnellen Intervallen ändern. Ich möchte diese Daten als Tabelle in der Konsolen-App anzeigen. f.ex:
-------------------------------------------------------------------------
| Column 1 | Column 2 | Column 3 | Column 4 |
-------------------------------------------------------------------------
| | | | |
| | | | |
| | | | |
-------------------------------------------------------------------------
Wie kann man schnell arbeiten und wie kann man die Spaltenbreite korrigieren? Ich weiß, wie man das in Java macht, aber ich weiß nicht, wie es in C # gemacht wird.
Antworten:
Sie könnten Folgendes tun:
quelle
Verwenden Sie String.Format mit Ausrichtungswerten.
Beispielsweise:
So erstellen Sie eine formatierte Zeile
quelle
-
für{0,-5}
Bearbeiten: Dank @superlogical können Sie jetzt den folgenden Code in github finden und verbessern !
Ich habe diese Klasse basierend auf einigen Ideen hier geschrieben. Die Spaltenbreite ist optimal und kann mit dieser einfachen API Objektarrays verarbeiten:
Hier ist die Klasse:
Bearbeiten: Ich habe eine geringfügige Verbesserung hinzugefügt. Wenn die Spaltenüberschriften der Eigenschaftsname sein sollen, fügen Sie die folgende Methode hinzu
TableParser
(beachten Sie, dass sie aufgrund von Reflexionen etwas langsamer ist):quelle
arrValues[rowIndex, colIndex] = valueSelectors[colIndex].Invoke(values[rowIndex - 1]).ToString();
aufvar val = valueSelectors[colIndex].Invoke(values[rowIndex - 1]); arrValues[rowIndex, colIndex] = val == null ? "null" : val.ToString();
es null zeigt auf diese Weise.Es gibt mehrere Open-Source-Bibliotheken, die die Formatierung von Konsolentabellen ermöglichen, von einfach (wie die Codebeispiele in den Antworten hier) bis hin zu fortgeschritteneren.
ConsoleTable
Nach NuGet-Statistiken ist ConsoleTable die beliebteste Bibliothek zum Formatieren von Tabellen . Tabellen sind wie folgt aufgebaut (aus der Readme-Datei):
Tabellen können mit einem der vordefinierten Stile formatiert werden. Es wird so aussehen:
Diese Bibliothek erwartet einzeilige Zellen ohne Formatierung.
Es gibt einige auf ConsoleTable basierende Bibliotheken mit leicht erweiterten Funktionssätzen, z. B. mehr Linienstilen.
CsConsoleFormat
Wenn Sie eine komplexere Formatierung benötigen, können Sie CsConsoleFormat verwenden . † Hier ist eine Tabelle, die aus einer Prozessliste (aus einem Beispielprojekt) generiert wurde:
Das Endergebnis sieht folgendermaßen aus:
Es unterstützt jede Art von Tabellenzeilen (mehrere enthalten und anpassbar), mehrzeilige Zellen mit Zeilenumbruch, Farben, Spalten, die je nach Inhalt oder Prozentsatz wachsen, Textausrichtung usw.
† CsConsoleFormat wurde von mir entwickelt.
quelle
TextWrap = TextWrapping.NoWrap
anders als im obigen Beispiel).new Cell(text) { Color = text == "true" ? Green : Red }
. Wenn Sie viele Tabellen mit ähnlichen Formatierungsregeln haben, können Sie diesen Code in eine Funktion einfügen, sei es für Zellen, Zeilen oder ganze Tabellen.quelle
StreamWriter
aufTextWriter
. 2. Ersetzen Sie denPrintToConsole
Code durch:PrintToStream(arrValues, Console.Out);
3. ??? 4. GEWINN!Ich wollte Spalten mit variabler Breite, und die Boxzeichen waren mir nicht besonders wichtig. Außerdem musste ich für jede Zeile einige zusätzliche Informationen drucken.
Für den Fall, dass jemand anderes das braucht, spare ich Ihnen ein paar Minuten:
Ausgabe:
quelle
Dies ist eine Verbesserung gegenüber einer früheren Antwort. Es unterstützt Werte mit unterschiedlicher Länge und Zeilen mit unterschiedlicher Anzahl von Zellen. Beispielsweise:
Hier ist der Code:
quelle
Ich habe ein Projekt auf GitHub, das Sie verwenden können
https://github.com/BrunoVT1992/ConsoleTable
Sie können es so verwenden:
Es wird dieses Ergebnis geben:
quelle
Verwenden Sie die MarkDownLog-Bibliothek (Sie finden sie auf NuGet).
Sie können einfach die Erweiterung ToMarkdownTable () für jede Sammlung verwenden. Sie übernimmt die gesamte Formatierung für Sie.
Die Ausgabe sieht ungefähr so aus:
quelle
Falls dies jemandem hilft, ist dies eine einfache Klasse, die ich für meine Bedürfnisse geschrieben habe. Sie können es einfach ändern, um es Ihren Bedürfnissen anzupassen.
Beispielnutzung:
Ausgabe:
quelle
quelle
In VisualBasic.net ist es einfacher!
Wenn Sie möchten, dass der Benutzer Daten manuell in eine Tabelle eingeben kann:
Es sollte so aussehen:
quelle