在c#中解析控制台输出

时间:2015-07-06 10:19:50

标签: c# parsing console

我有一个API方法WriteSerie(),它在控制台上写入一些数据。我的目标是实时解析WriteSerie()的输出,这样如果输出中出现特定条件,控制台会写入我定义的另一行。 有什么方法可以用于此目的?

2 个答案:

答案 0 :(得分:3)

我认为您希望对控制台的输出进行一般性修改,例如,如果Serie转到输出,您希望在它之前写一条消息。所以你的代码可能是这样的:

class MyWriter : TextWriter
{
    private TextWriter originalOut;
    public MyWriter()
    {
        originalOut = Console.Out;
    }
    public override Encoding Encoding
    {
        get { return new System.Text.ASCIIEncoding(); }
    }
    public override void WriteLine(string message)
    {
        originalOut.WriteLine(CheckMySerie(message));
    }
    public override void Write(string message)
    {
        originalOut.Write(CheckMySerie(message));
    }
    private string CheckMySerie(string message)
    {
        if (message.Contains("MySerie"))
            return "My Serie has been found\n" + message;
        else
            return message;
    }

}

class Program
{
    static void Main(string[] args)
    {
        Console.SetOut(new MyWriter());
        Console.WriteLine("test 1 2 3");
        Console.WriteLine("test MySerie 2 3");
        Console.ReadKey();
    }
}

答案 1 :(得分:-2)

第一个解决方案:

public class ConsoleWriterEventArgs : EventArgs
    {
        public string Value { get; private set; }
        public ConsoleWriterEventArgs(string value)
        {
            Value = value;
        }
    }

    public class ConsoleWriter : TextWriter
    {
        public override Encoding Encoding { get { return Encoding.UTF8; } }

        public override void Write(string value)
        {
            if (WriteEvent != null) WriteEvent(this, new ConsoleWriterEventArgs(value));
            base.Write(value);
        }

        public override void WriteLine(string value)
        {
            if (WriteLineEvent != null) WriteLineEvent(this, new ConsoleWriterEventArgs(value));
            base.WriteLine(value);
        }

        public event EventHandler<ConsoleWriterEventArgs> WriteEvent;
        public event EventHandler<ConsoleWriterEventArgs> WriteLineEvent;
    }

你可以使用任何一个编写器。

第二个解决方案:

 static void Main()
    {
        using (var consoleWriter = new ConsoleWriter())
        {
            consoleWriter.WriteEvent += consoleWriter_WriteEvent;
            consoleWriter.WriteLineEvent += consoleWriter_WriteLineEvent;

            Console.SetOut(consoleWriter);
        }
    }

设置侦听器事件:

<script type="text/ng-template" id="ng-wig/views/ng-wig.html">

<div class="ng-wig">
    <div class="btn-group btn-group-sm wd-wide">
        <button type="button" title="Header" ng-click="execCommand('formatblock', '&lt;h1&gt;')" class="btn btn-sm btn-default"><em class="fa fa-header"></em></button>
        <button type="button" title="Paragraph" ng-click="execCommand('formatblock', '&lt;p&gt;')" class="btn btn-sm btn-default"><em class="fa fa-paragraph"></em></button>
        <button type="button" title="Unordered List" ng-click="execCommand('insertunorderedlist')" class="btn btn-sm btn-default"><em class="fa fa-list-ul"></em></button>
        <button type="button" title="Ordered List" ng-click="execCommand('insertorderedlist')" class="btn btn-sm btn-default"><em class="fa fa-list-ol"></em></button>
        <button type="button" title="Bold" ng-click="execCommand('bold')" class="btn btn-sm btn-default"><em class="fa fa-bold"></em></button>
        <button type="button" title="Italic" ng-click="execCommand('italic')" class="btn btn-sm btn-default"><em class="fa fa-italic"></em></button>
        <button type="button" title="link" ng-click="execCommand('createlink')" class="btn btn-sm btn-default"><em class="fa fa-link"></em></button>
        <button type="button" title="Edit Html" ng-class="{ 'nw-button--active': editMode }" ng-click="toggleEditMode()" class="btn btn-sm btn-default"><em class="fa fa-pencil"></em></button>
        <div class="col-lg-3 pull-right btn-variable btn-var-padding">
            <select class="form-control" ng-model="variable" ng-change="InsertVariable(variable)">
                <option value="">{{controlText.InsertVariable}}</option>
                <optgroup label="Mailbox">
                    <option value="{%mailbox.email%}">{{controlText.Email}}</option>
                    <option value="{%mailbox.name%}">{{controlText.Name}}</option>
                </optgroup>
                <optgroup label="User">
                    <option value="{%user.fullName%}">{{controlText.FullName}}</option>
                    <option value="{%user.firstName%}">{{controlText.FirstName}}</option>
                    <option value="{%user.lastName%}">{{controlText.LastName}}</option>
                    <option value="{%user.email%}">{{controlText.EmailAddress}}</option>
                    <option value="{%user.phone%}">{{controlText.PhoneNumber}}</option>
                    <option value="{%user.jobTitle%}">{{controlText.JobTitle}}</option>
                </optgroup>
            </select>
        </div>
</div>

您将收到活动中的每一行

相关问题