J'ai une question intéressante. Imaginez que beaucoup de données changent à des intervalles très rapides. Je souhaite afficher ces données sous forme de tableau dans l'application console. par exemple:
-------------------------------------------------------------------------
| Column 1 | Column 2 | Column 3 | Column 4 |
-------------------------------------------------------------------------
| | | | |
| | | | |
| | | | |
-------------------------------------------------------------------------
Comment garder les choses rapides et comment fixer la largeur des colonnes? Je sais comment faire cela en java, mais je ne sais pas comment cela se fait en C #.
Réponses:
Vous pouvez faire quelque chose comme ceci:
la source
Utilisez String.Format avec les valeurs d'alignement.
Par exemple:
Pour créer une ligne formatée.
la source
-
pour le contenu{0,-5}
Edit: grâce à @superlogical, vous pouvez désormais trouver et améliorer le code suivant dans github !
J'ai écrit ce cours sur la base de quelques idées ici. La largeur des colonnes est optimale, et il peut gérer des tableaux d'objets avec cette API simple:
Voici la classe:
Edit: J'ai ajouté une amélioration mineure - si vous voulez que les en-têtes de colonne soient le nom de la propriété, ajoutez la méthode suivante à
TableParser
(notez que ce sera un peu plus lent en raison de la réflexion):la source
arrValues[rowIndex, colIndex] = valueSelectors[colIndex].Invoke(values[rowIndex - 1]).ToString();
pourvar val = valueSelectors[colIndex].Invoke(values[rowIndex - 1]); arrValues[rowIndex, colIndex] = val == null ? "null" : val.ToString();
qu'il montre null.Il existe plusieurs bibliothèques open-source qui permettent le formatage de la table de la console, allant du simple (comme les exemples de code dans les réponses ici) au plus avancé.
ConsoleTable
À en juger par les statistiques NuGet, la bibliothèque la plus populaire pour la mise en forme des tableaux est ConsoleTable . Les tables sont construites comme ceci (à partir du fichier readme):
Les tableaux peuvent être formatés à l'aide de l'un des styles prédéfinis. Cela ressemblera à ceci:
Cette bibliothèque attend des cellules sur une seule ligne sans mise en forme.
Il existe quelques bibliothèques basées sur ConsoleTable avec des ensembles de fonctionnalités légèrement étendus, comme plus de styles de ligne.
CsConsoleFormat
Si vous avez besoin d'un formatage plus complexe, vous pouvez utiliser CsConsoleFormat . † Voici un tableau généré à partir d'une liste de processus (à partir d'un exemple de projet):
Le résultat final ressemblera à ceci:
Il prend en charge tout type de lignes de tableau (plusieurs incluses et personnalisables), les cellules multilignes avec retour à la ligne, les couleurs, les colonnes croissantes en fonction du contenu ou du pourcentage, l'alignement du texte, etc.
† CsConsoleFormat a été développé par moi.
la source
TextWrap = TextWrapping.NoWrap
contrairement à l'exemple ci-dessus).new Cell(text) { Color = text == "true" ? Green : Red }
. Si vous avez de nombreux tableaux avec des règles de mise en forme similaires, vous pouvez mettre ce code dans une fonction, que ce soit pour une cellule, une ligne ou un tableau entier.la source
StreamWriter
àTextWriter
. 2. Remplacez lePrintToConsole
code par:PrintToStream(arrValues, Console.Out);
3. ??? 4. PROFIT!Je voulais des colonnes de largeur variable et je ne me souciais pas particulièrement des caractères de la boîte. De plus, j'avais besoin d'imprimer des informations supplémentaires pour chaque ligne.
Donc, au cas où quelqu'un d'autre en aurait besoin, je vous ferai gagner quelques minutes:
Production:
la source
Ceci est une amélioration par rapport à une réponse précédente. Il ajoute la prise en charge des valeurs de longueurs variables et des lignes avec un nombre variable de cellules. Par exemple:
Voici le code:
la source
J'ai un projet sur GitHub que vous pouvez utiliser
https://github.com/BrunoVT1992/ConsoleTable
Vous pouvez l'utiliser comme ceci:
Cela donnera ce résultat:
la source
Utilisez la bibliothèque MarkDownLog (vous pouvez la trouver sur NuGet)
vous pouvez simplement utiliser l'extension ToMarkdownTable () pour n'importe quelle collection, elle fait tout le formatage pour vous.
La sortie ressemble à ceci:
la source
Au cas où cela aiderait quelqu'un, c'est un cours simple que j'ai écrit pour mon besoin. Vous pouvez le modifier facilement en fonction de vos besoins.
Exemple d'utilisation:
Production:
la source
la source
C'est plus facile dans VisualBasic.net!
Si vous souhaitez que l'utilisateur puisse saisir manuellement des données dans un tableau:
Ça devrait ressembler à ça:
la source