web-dev-qa-db-ja.com

Console.WriteLineを使用して書き込まれたばかりの文字を削除する方法はありますか?

コンソールから最後の文字を削除する方法はありますか?.

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

もちろん、最初に文字列を作成してからコンソールに出力することもできますが、コンソールから直接文字を削除できるかどうかを知りたいだけです。

40
Contango

「\ b」はASCIIbackspace。1文字をバックアップするために印刷します。

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

「AbDef」を出力します。

ContangoとSammiが指摘したように、スペースで上書きする必要がある場合があります。

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

Console.Write("\b \b");はおそらくあなたが望むものです。最後の文字を削除し、キャレットを戻します。

_\b_バックスペースエスケープ文字は、キャレットを戻すだけです。最後の文字は削除されません。したがって、Console.Write("\b");はキャレットを1つだけ後ろに移動し、最後の文字を表示したままにします。

Console.Write("\b \b");ただし、最初にキャレットを戻し、次に最後の文字を上書きする空白文字を書き込み、キャレットを再び前方に移動します。そこで、キャレットを再び戻すために、2番目の_\b_を書きます。これで、バックスペースボタンの通常の動作が完了しました。

41
Sammi

これは、Writeの代わりにWriteLineを使用する場合に役立ちます。

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

しかし、実際にはコンソールを十分に制御できます。任意の場所に書き込むことができます。 Console.SetCursorPosition(int, int)メソッドを使用するだけです。

16

1つの文字のみを削除する場合は、次を使用できます。

Console.SetCursorPosition(Console.CursorLeft - 1, Console.CursorTop);およびConsole.Write()再度。

オートメーションのように複数の文字を削除する場合、現在の_Console.CursorLeft_を変数に保存し、その値をループ内のConsole.SetCursorPosition(--variablename, Console.CursorTop)で使用して、必要な多くの文字を削除できます。

4

上記のソリューションは、forループまたはforeachループを反復処理していない限り、非常に効果的です。そのような状況では、次のような別のアプローチを使用する必要があります

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

ただし、文字列結合でもうまく機能します。

例:

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

コンソールでキャラクターを適切に削除するには

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

これにより、適切にカーソルの前の文字が削除され、後続のすべての文字が戻されます。を使用して

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

カーソルの前の文字を空白で置き換えるだけで、実際にはremove削除しません!

私の提案したソリューションは、ANSIエスケープシーケンスを使用しているため、他のプログラミング言語でも動作するはずです!

2
nullmn

コンソールをクリアしてから、新しい出力を書き込むことができます。

1
Tony Abrams