コンソールから最後の文字を削除する方法はありますか?.
Console.WriteLine("List: Apple,pear,");
// Somehow delete the last ',' character from the console.
Console.WriteLine(".");
// Now the console contains "List: Apple,pear."
もちろん、最初に文字列を作成してからコンソールに出力することもできますが、コンソールから直接文字を削除できるかどうかを知りたいだけです。
「\ b」はASCIIbackspace。1文字をバックアップするために印刷します。
Console.Write("Abc");
Console.Write("\b");
Console.Write("Def");
「AbDef」を出力します。
ContangoとSammiが指摘したように、スペースで上書きする必要がある場合があります。
Console.Write("\b \b");
Console.Write("\b \b");
はおそらくあなたが望むものです。最後の文字を削除し、キャレットを戻します。
_\b
_バックスペースエスケープ文字は、キャレットを戻すだけです。最後の文字は削除されません。したがって、Console.Write("\b");
はキャレットを1つだけ後ろに移動し、最後の文字を表示したままにします。
Console.Write("\b \b");
ただし、最初にキャレットを戻し、次に最後の文字を上書きする空白文字を書き込み、キャレットを再び前方に移動します。そこで、キャレットを再び戻すために、2番目の_\b
_を書きます。これで、バックスペースボタンの通常の動作が完了しました。
これは、Write
の代わりにWriteLine
を使用する場合に役立ちます。
_Console.Write("List: Apple,pear,");
Console.Write("\b"); // backspace character
Console.WriteLine(".");
_
しかし、実際にはコンソールを十分に制御できます。任意の場所に書き込むことができます。 Console.SetCursorPosition(int, int)
メソッドを使用するだけです。
1つの文字のみを削除する場合は、次を使用できます。
Console.SetCursorPosition(Console.CursorLeft - 1, Console.CursorTop);
およびConsole.Write()
再度。
オートメーションのように複数の文字を削除する場合、現在の_Console.CursorLeft
_を変数に保存し、その値をループ内のConsole.SetCursorPosition(--variablename, Console.CursorTop)
で使用して、必要な多くの文字を削除できます。
上記のソリューションは、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");
コンソールでキャラクターを適切に削除するには
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エスケープシーケンスを使用しているため、他のプログラミング言語でも動作するはずです!
コンソールをクリアしてから、新しい出力を書き込むことができます。