Tengo una pregunta interesante. Imagina que tengo muchos datos cambiando en intervalos muy rápidos. Quiero mostrar esos datos como una tabla en la aplicación de consola. f.ex:
-------------------------------------------------------------------------
| Column 1 | Column 2 | Column 3 | Column 4 |
-------------------------------------------------------------------------
| | | | |
| | | | |
| | | | |
-------------------------------------------------------------------------
¿Cómo mantener las cosas rápido y cómo corregir el ancho de las columnas? Sé cómo hacer eso en Java, pero no sé cómo se hace en C #.
Respuestas:
Podrías hacer algo como lo siguiente:
fuente
Utilice String.Format con valores de alineación.
Por ejemplo:
Para crear una fila con formato.
fuente
-
para contenido alineado a la izquierda, por ejemplo:{0,-5}
Editar: gracias a @superlogical, ¡ahora puedes encontrar y mejorar el siguiente código en github !
Escribí esta clase basándome en algunas ideas aquí. El ancho de las columnas es óptimo y puede manejar matrices de objetos con esta API simple:
Aquí está la clase:
Editar: agregué una mejora menor: si desea que los encabezados de columna sean el nombre de la propiedad, agregue el siguiente método a
TableParser
(tenga en cuenta que será un poco más lento debido a la reflexión):fuente
arrValues[rowIndex, colIndex] = valueSelectors[colIndex].Invoke(values[rowIndex - 1]).ToString();
para quevar val = valueSelectors[colIndex].Invoke(values[rowIndex - 1]); arrValues[rowIndex, colIndex] = val == null ? "null" : val.ToString();
de esta manera se muestre nulo.Hay varias bibliotecas de código abierto que permiten el formateo de tablas de consola, desde simples (como los ejemplos de código en las respuestas aquí) hasta más avanzados.
Mesa de consola
A juzgar por las estadísticas de NuGet, la biblioteca más popular para formatear tablas es ConsoleTable . Las tablas se construyen así (del archivo Léame):
Las tablas se pueden formatear utilizando uno de los estilos predefinidos. Se verá así:
Esta biblioteca espera celdas de una sola línea sin formato.
Hay un par de bibliotecas basadas en ConsoleTable con conjuntos de características ligeramente ampliados, como más estilos de línea.
CsConsoleFormat
Si necesita un formato más complejo, puede usar CsConsoleFormat . † Aquí hay una tabla generada a partir de una lista de procesos (de un proyecto de muestra):
El resultado final se verá así:
Admite cualquier tipo de líneas de tabla (varias incluidas y personalizables), celdas de varias líneas con ajuste de palabras, colores, columnas que crecen según el contenido o porcentaje, alineación del texto, etc.
† CsConsoleFormat fue desarrollado por mí.
fuente
TextWrap = TextWrapping.NoWrap
diferencia del ejemplo anterior).new Cell(text) { Color = text == "true" ? Green : Red }
. Si tiene muchas tablas con reglas de formato similares, puede poner ese código en alguna función, ya sea para celda, fila o tabla completa.fuente
StreamWriter
aTextWriter
. 2. Reemplace elPrintToConsole
código con:PrintToStream(arrValues, Console.Out);
3. ??? 4. ¡BENEFICIOS!Quería columnas de ancho variable, y no me importaban particularmente los caracteres del cuadro. Además, necesitaba imprimir información adicional para cada fila.
Entonces, en caso de que alguien más lo necesite, te ahorraré unos minutos:
Salida:
fuente
Esta es una mejora de una respuesta anterior. Agrega soporte para valores con diferentes longitudes y filas con un número variable de celdas. Por ejemplo:
Aquí está el código:
fuente
Tengo un proyecto en GitHub que puedes usar
https://github.com/BrunoVT1992/ConsoleTable
Puedes usarlo así:
Dará este resultado:
fuente
Use la biblioteca MarkDownLog (puede encontrarla en NuGet)
simplemente puede usar la extensión ToMarkdownTable () para cualquier colección, hace todo el formateo por usted.
La salida se parece a esto:
fuente
En caso de que esto ayude a alguien, esta es una clase simple que escribí para mi necesidad. Puede cambiarlo fácilmente para adaptarlo a sus necesidades.
Uso de muestra:
Salida:
fuente
fuente
¡Es más fácil en VisualBasic.net!
Si desea que el usuario pueda ingresar datos manualmente en una tabla:
Debe tener un aspecto como este:
fuente