web-dev-qa-db-fra.com

Existe-t-il un moyen de supprimer un caractère qui vient d'être écrit à l'aide de Console.WriteLine?

Existe-t-il un moyen de supprimer le dernier caractère de la console, c'est-à-dire.

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

Bien sûr, je pourrais d'abord créer une chaîne, puis l'imprimer sur la console, mais je suis simplement curieux de voir si je peux supprimer des caractères directement de la console.

40
Contango

"\ b" est ASCII retour arrière. Imprimez-le pour sauvegarder un caractère.

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

sorties "AbDef";

Comme l'ont souligné Contango et Sammi, il y a des moments où l'écrasement avec un espace est nécessaire:

    Console.Write("\b \b");
59
John Arlen

Console.Write("\b \b"); est probablement ce que vous voulez. Il supprime le dernier caractère et recule le curseur.

Le caractère d'échappement de retour arrière \b Ne fait que reculer le curseur. Il ne supprime pas le dernier caractère. Ainsi, Console.Write("\b"); ne fait que reculer le curseur, laissant le dernier caractère encore visible.

Console.Write("\b \b"); cependant, recule d'abord le signe d'insertion, puis écrit un caractère d'espacement qui écrase le dernier caractère et déplace à nouveau le signe d'insertion vers l'avant. Nous écrivons donc un deuxième \b Pour reculer le curseur. Nous avons maintenant fait ce que fait normalement le bouton de retour arrière.

41
Sammi

Cela fera l'affaire si vous utilisez Write au lieu de WriteLine.

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

Mais vous avez en fait beaucoup de contrôle sur la console. Vous pouvez écrire à n'importe quel endroit de votre choix. Utilisez simplement la méthode Console.SetCursorPosition(int, int).

16

si vous souhaitez supprimer un seul caractère, vous pouvez utiliser:

Console.SetCursorPosition(Console.CursorLeft - 1, Console.CursorTop); et Console.Write() à nouveau.

si vous voulez supprimer plus d'un caractère, comme une automatisation, vous pouvez stocker le Console.CursorLeft actuel dans une variable et utiliser cette valeur dans Console.SetCursorPosition(--variablename, Console.CursorTop) dans une boucle pour supprimer plusieurs caractères que vous voulez!

4
Luciano Santesso

Les solutions ci-dessus fonctionnent très bien, sauf si vous parcourez une boucle for ou foreach. Dans cette situation, vous devez utiliser une approche différente, comme

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

Cela fonctionne cependant bien aussi pour une jointure de chaîne.

Exemples:

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");
3
aldosa

Pour supprimer correctement un caractère sur la console, utilisez

Console.Write("\x1B[1D"); // Move the cursor one unit to the left
Console.Write("\x1B[1P"); // Delete the character

Cela correctement supprimera le caractère avant le curseur et ramènera tous les caractères suivants en arrière. En utilisant

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

vous ne remplacerez le caractère devant le curseur que par un espace blanc et pas réellement supprimez !

Ma solution proposée devrait également fonctionner dans d'autres langages de programmation, car elle utilise des séquences d'échappement ANSI!

2
nullmn

Vous pouvez effacer la console, puis écrire la nouvelle sortie.

1
Tony Abrams