从控制台删除特殊字符 - c#

时间:2012-05-08 18:29:31

标签: c# console

我尝试编写一个从控制台中删除特殊字符的函数。 例如,如果我写:

Console.WriteLine("Hello World");

用字符'o'调用函数后,控制台将如下:

"Hell Wrld"

我想过用

跑遍整个控制台
Console.SetCursorPosition(i,j);

但我无法获得“CursorPosition”的价值..

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

CAN 读取已写入控制台的内容!

没有方法可以在.NET中读取控制台缓冲区,但是您可以调用几个WinAPI函数来完成工作。

结帐GetStdHandle()GetConsoleScreenBufferInfo()ReadConsoleOutput()

答案 1 :(得分:1)

您无法阅读已写入控制台的内容。但是,您可以做的一件事是提供自己的输出流。您可以创建自己的TextWriter实现,该实现将提供原始输出流以及过滤器字符。然后,您可以将控制台的输出流设置为新的输出流,然后在任何人写入您的程序输出流时,它将过滤您选择的字符。

我使用以下代码行运行了一些简单的测试,它似乎工作得很好。如果它不包括任何更复杂的案例,请告诉我。

public class FilteringTextWriter : TextWriter
{
    private HashSet<char> invalidChars;
    private TextWriter destinationStream;
    public FilteringTextWriter(IEnumerable<char> invalidChars, TextWriter destinationStream)
        : base()
    {
        this.invalidChars = new HashSet<char>(invalidChars);
        this.destinationStream = destinationStream;
    }
    public override void Write(char value)
    {
        if (!invalidChars.Contains(value))
        {
            destinationStream.Write(value);
        }
    }
}

在Main或其他地方的其他地方:

Console.SetOut(new FilteringTextWriter(new[] { 'o' }, Console.Out));

答案 2 :(得分:0)

Console.CursorLeftConsole.CursorTop是光标位置的“get”方法。

答案 3 :(得分:0)

您无法从控制台缓冲区中读取,也就是说,您无法获取已写入控制台的内容。 (直接在C#中,但您可以使用本机Windows API或使用Interop)。

所以,也许您最好将Console类包装在您自己的类中,并在将其写入屏幕之前过滤该字符串,

 public MyConsole
 {
     // expose the neede methods:
     public void WriteLine(string text)
     {
         Console.WriteLine(text.Replace(...)); // filter out the special chars
     }
 }

然后使用MyConsole代替Console