1
我想實現一個ICharacterDevice來捕獲完整的輸出。我發現在這如一些信息:RDotNet ICharacterDevice捕獲輸出
Implementing an interactive R console in c#/rdotnet?
不過,我發現它不可能找到一個完整的例子,並努力讓我自己這方面的工作。有沒有人有過這樣的例子?
非常感謝
馬克
我想實現一個ICharacterDevice來捕獲完整的輸出。我發現在這如一些信息:RDotNet ICharacterDevice捕獲輸出
Implementing an interactive R console in c#/rdotnet?
不過,我發現它不可能找到一個完整的例子,並努力讓我自己這方面的工作。有沒有人有過這樣的例子?
非常感謝
馬克
爲了捕獲輸出,你需要實現自己的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來挖掘並附加每個輸出消息。
最後,你需要這個ICharacterDevice傳遞給雙方的GetInstance和初始化方法:
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();
很不錯的解決方案大衛。我在WriteConsole()方法中調用了簡單的記錄器,這樣我的活動輸出顯示在我的WPF應用程序中。 – JavaJedi