2017-06-23 18 views
1

完全な出力をキャプチャするICharacterDeviceを実装しようとしています。私はこのようなのいくつかの情報を発見した:RDotNet ICharacterDeviceキャプチャ出力

Implementing an interactive R console in c#/rdotnet?

私はしかし、それは不可能完全な例を見つけることが見つけ、自分でこの作業を取得するために苦労しています。前例を使って誰もこれをやったことがありますか?

感謝

マーク

答えて

2

出力をキャプチャするために、あなた自身のICharacterDeviceを実装する必要があります。良いニュースは、WriteConsoleメソッドを実装する必要があることだけです。あなたはデフォルトのConsoleDeviceから始めることも、最初から自分自身を始めることもできます。

public class MyCharacterDevice : RDotNet.Devices.ICharacterDevice 
{ 
    public StringBuilder sb = new StringBuilder(); 

    public void WriteConsole(string output, int length, RDotNet.Internals.ConsoleOutputType outputType) 
    { 
     sb.Append(output); 
    } 

    //rest of the implementation here 
} 

私はStringBuilderを追加して各出力メッセージを追加しました。

最後に、あなたは両方でGetInstanceにこのICharacterDeviceを渡すとメソッドを初期化する必要があります。

RDotNet.StartupParameter sp = new StartupParameter(); 
sp.Interactive = false; 
sp.Quiet = false; 

MyCharacterDevice ic = new MyCharacterDevice(); 
REngine.SetEnvironmentVariables(Rpath); 
REngine engine = REngine.GetInstance("", true, sp, ic); 

if (engine.IsRunning == false) 
{ 
    engine.Initialize(sp, ic, true); 
} 

//engine.Evaluate code... 

string rConsoleMessages = ic.sb.ToString(); 
+0

非常に素晴らしいソリューションデビッド。 WriteConsole()メソッドで簡単なロガーを呼び出して、WPFアプリケーションにライブ出力を表示させます。 – JavaJedi

関連する問題