¿Hay alguna manera de eliminar un carácter que acaba de ser escrito usando la consola?¿WriteLine?


¿Hay alguna forma de eliminar el último carácter de la consola, es decir,

Console.WriteLine("List: apple,pear,");
// Somehow delete the last ',' character from the console.
Console.WriteLine(".");
// Now the console contains "List: apple,pear."

Claro, primero podría crear una cadena y luego imprimirla en la consola, pero tengo curiosidad por ver si puedo eliminar caracteres directamente de la consola.

Author: Contango, 2011-03-04

6 answers

"\b" es el retroceso ASCII. Imprímelo para respaldar un char.

    Console.Write("Abc");
    Console.Write("\b");
    Console.Write("Def");

Salidas "AbDef";

Como señalan Contango y Sammi, hay momentos en los que se requiere sobrescribir con un espacio: Consola.Write ("\b \b");

 51
Author: John Arlen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-01 17:31:03

Console.Write("\b \b"); es probablemente lo que quieres. Elimina el último trazo y mueve el cuadro hacia atrás.

El carácter de escape de retroceso \b solo mueve el recuadro hacia atrás. No quita el último char. Así que Console.Write("\b"); solo mueve el cuadro uno hacia atrás, dejando el último carácter aún visible.

Console.Write("\b \b"); sin embargo, primero mueve el signo hacia atrás, luego escribe un carácter de espacio en blanco que sobrescribe el último carácter y mueve el signo hacia adelante de nuevo. Así que escribimos un segundo \b para mover el cuadro de nuevo. Ahora nosotros han hecho lo que el botón de retroceso normalmente hace.

 37
Author: Sammi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-29 09:28:49

Esto hará el truco si usas Write en lugar de WriteLine.

Console.Write("List: apple,pear,");
Console.Write("\b");  // backspace character
Console.WriteLine(".");

Pero en realidad tienes mucho control sobre la consola. Puede escribir a cualquier lugar que desee. Simplemente use el método Console.SetCursorPosition(int, int).

 14
Author: Jeffrey L Whitledge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-04 15:35:09

Si desea eliminar solo un char puede usar:

Console.SetCursorPosition(Console.CursorLeft - 1, Console.CursorTop); y Console.Write() de nuevo.

Si desea eliminar más de un carácter, como una automatización, puede almacenar el Console.CursorLeft actual en una variable y usar ese valor en Console.SetCursorPosition(--variablename, Console.CursorTop) en un bucle para eliminar muchos caracteres que desee!

 3
Author: Luciano Santesso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-20 20:07:09

Las soluciones anteriores funcionan muy bien a menos que esté iterando a través de un bucle for o foreach. En esa situación debe utilizar un enfoque diferente, como

 Console.SetCursorPosition(Console.CursorLeft - 1, Console.CursorTop);
 Console.WriteLine(" ");

Lo hace, sin embargo funciona bien también para una unión de cadena.

Ejemplos:

List<int> myList = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

for (int i = 0; i < myList.Count; i++)
{
    Console.Write(myList[i] + ", ");
}

Console.WriteLine("\b\b"); //this will not work.

foreach (int item in myList)
{
    Console.Write(item + ", ");
}

//this will work:
Console.SetCursorPosition(Console.CursorLeft - 2, Console.CursorTop);
Console.WriteLine("  ");

//you can also do this, btw
Console.WriteLine(string.Join(", ", myList) + "\b\b");
 2
Author: aldosa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-22 19:01:39

Puede borrar la consola y luego escribir la nueva salida.

 1
Author: Tony Abrams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-04 15:33:53