¿Alguien tiene o sabe de un TextWriter para la consola que entiende cómo sangrar/no escribir y tiene la capacidad de establecer el nivel de sangrado?Consola .NET TextWriter que entiende Sangría/Unindent/IndentLevel
5
A
Respuesta
7
Prueba esto: el uso
class MyConsole : TextWriter {
TextWriter mOldConsole;
bool mDoIndent;
public MyConsole() {
mOldConsole = Console.Out;
Console.SetOut(this);
}
public int Indent { get; set; }
public override void Write(char ch) {
if (mDoIndent) {
mDoIndent = false;
for (int ix = 0; ix < Indent; ++ix) mOldConsole.Write(" ");
}
mOldConsole.Write(ch);
if (ch == '\n') mDoIndent = true;
}
public override System.Text.Encoding Encoding {
get { return mOldConsole.Encoding; }
}
}
muestra:
class Program {
static MyConsole Output = new MyConsole();
static void Main(string[] args) {
Console.WriteLine("Hello");
Output.Indent++;
Console.WriteLine("world");
Output.Indent--;
Console.WriteLine("Back");
Console.ReadLine();
}
}
2
por lo general sólo hacer algo como esto (en mi clase de aplicación):
static TextWriter tw;
static int indentLevel = 0;
static void Indend()
{
indentLevel++;
}
static void Outdent()
{
indentLevel--;
}
static void WriteLine(string s)
{
tw.WriteLine(new string('\t', indentLevel) + s);
}
static void WriteLine()
{
tw.WriteLine();
}
y luego, por ejemplo,
using (tw = new StreamWriter(outputName))
{
WriteLine(string.Format("namespace {0}", nameSpace));
WriteLine("{");
Indend();
foreach (string s in dataSourceItems)
GenerateProc(s);
Outdent();
WriteLine("}");
}
Obviamente puede encapsular esto en una clase separada si lo desea.
9
System.CodeDom.Compiler.IndentedTextWriter
Este está integrado en el .Net Framework en system.dll, pero no es super-resistente . Debería funcionar bajo un uso restringido (como no tener un carácter de nueva línea en una cadena).
static void Main(string[] args)
{
using (System.CodeDom.Compiler.IndentedTextWriter writer = new System.CodeDom.Compiler.IndentedTextWriter(Console.Out, " "))
{
Console.SetOut(writer);
writer.Indent = 0;
writer.WriteLine("test");
writer.Indent = 1;
writer.WriteLine("What happens\nif there are line-\nbreak in the middle?");
writer.Indent = 2;
writer.WriteLine("another test");
writer.Indent = 3;
writer.WriteLine("and another test");
writer.Indent = 0;
writer.WriteLine("hello");
}
Console.ReadLine();
}
+1
+1 para un buen código de ejemplo – AMissico
Cuestiones relacionadas
- 1. . Aplicación de consola .Net que no muestra una consola
- 2. que muestra el porcentaje en la aplicación de consola .net
- 3. Consola avanzada IO en .NET
- 4. C# TextWriter, permite la lectura de archivos:
- 5. ¿Qué se entiende por "sustituciones que evitan la captura"?
- 6. Lo que se entiende por 'MyType = Int => Boole'
- 7. ¿Cómo entiende malloc la alineación?
- 8. ¿Qué se entiende por inmutable?
- 9. ¿Qué se entiende por WS- *?
- 10. Linq ExecuteCommand no entiende nulos
- 11. ¿Cómo borrar la consola en C# .net?
- 12. ¿Hay una interfaz TextWriter para la clase System.Diagnostics.Debug?
- 13. C# creando archivos usando memorystream en lugar de textwriter
- 14. OutputStream no está disponible cuando se utiliza un TextWriter personalizado
- 15. ¿Hay alguna manera de hacer que IE8 no ignore una regla CSS que solo entiende parcialmente?
- 16. ¿Qué se entiende por deshabilitar las interrupciones?
- 17. ¿Qué se entiende por metadatos en Android?
- 18. ¿Qué se entiende por el término "Instrumentación"?
- 19. ¿Qué se entiende por tipo parametrizado?
- 20. ¿Qué se entiende por .delegate = self?
- 21. ¿Cómo evito que se imprima la tecla presionada en la consola en .NET?
- 22. Aplicación .NET que se ejecuta como Windows Form o como aplicación de consola
- 23. ¿Cómo una aplicación de consola .NET busca conjuntos referenciados?
- 24. ¿Hay alguna biblioteca de "gráficos" de consola para .Net?
- 25. Cómo ejecutar una aplicación de consola .NET en segundo plano
- 26. Evento de salida de la aplicación de consola .NET
- 27. ¿Cómo mantener una aplicación de consola .NET ejecutándose?
- 28. Utilizando la clase .NET BackgroundWorker en la aplicación de consola
- 29. Redirigir la consola a una cadena en un programa .NET
- 30. ¿Cómo bloqueo la consola entre subprocesos en C# .NET?
Bonito, maneja caracteres de nueva línea como se esperaba. – AMissico
Anywhay para "extender" la consola para hacer que la sintaxis sea más natural, como Console.Indent ++; – AMissico
@AMissico: No, la consola está sellada. –