台灣最大程式設計社群網站
線上人數
1210
 
會員總數:243449
討論主題:188175
歡迎您免費加入會員
討論區列表 >> C# >> 以C#為主,利用python計算數值問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
以C#為主,利用python計算數值問題
價值 : 80 QP  點閱數:139 回應數:12

樓主

mikelouis
門外漢
0 2
23 6
發送站內信

各位大大好! 小弟我最近想要使用C#讀取當前txt檔案裡全部的數值,將值傳到編寫好的python.py裡面做運算後再將數值做回傳,每三秒重複一次。 但是不知道哪裡出了問題,麻煩各位大大幫我看一下了,謝謝!!

c#
[code]class Program
{
static void Main(string[] args)
{
System.Timers.Timer timer = new System.Timers.Timer();
timer.Enabled = true;
timer.Interval = 3000;
timer.Start();
timer.Elapsed += new System.Timers.ElapsedEventHandler(test);

Console.ReadKey();
}
private static void test(object source, ElapsedEventArgs e)
{
int counter = 0;
string line;

System.IO.StreamReader file =new System.IO.StreamReader(@"C:\Users\wkj88\Desktop\teraterm.txt");
while ((line = file.ReadToEnd()) != null)
{
string[] tokens = line.Split(' ');
counter++;
List<int> nums = new List<int>();
int oneNum;
foreach (string s in tokens)
{
if (Int32.TryParse(s, out oneNum))
nums.Add(oneNum);
}

ScriptRuntime pyRunTime = Python.CreateRuntime();
dynamic obj = pyRunTime.UseFile(@"C:\Users\wkj88\hello.py");
Console.Write(obj.welcome(nums));

}
file.Close();
Console.ReadKey();
}
}[/code]


python

def welcome(rms):
return sum(rms)

搜尋相關Tags的文章: [ c# ] , [ python ] ,
本篇文章發表於2018-11-07 09:31
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

春天
檢舉此回應
出了什麼問題?
本篇文章回覆於2018-11-07 10:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

春天
檢舉此回應
我"猜"你的Timer只執行1次,跟預期的每3秒執行1次不相符



參閱Timer
本篇文章回覆於2018-11-07 10:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

mikelouis
檢舉此回應
您好 定時器沒有問題,一樣會三秒執行一次,現在的問題是他沒有把數值傳到PYTHON的PY做運算,所以我執行程式時,
甚麼都沒有顯示。
本篇文章回覆於2018-11-07 16:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

春天
檢舉此回應
那就下中斷點Debug吧,這是必備技能
本篇文章回覆於2018-11-07 17:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

mikelouis
檢舉此回應
執行後他會出現Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: '在下列方法或屬性之間的呼叫模稜兩可:'System.Console.Write(string)' 和 'System.Console.Write(char[])''的error,在Console.Write(obj.welcome(nums));這行發生的,請問是哪裡有問題呢??

本篇文章回覆於2018-11-07 21:28
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

春天
檢舉此回應

本篇文章回覆於2018-11-08 08:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

mikelouis
檢舉此回應
使用6樓的方式的話,會出現IronPython.Runtime.Exceptions.TypeErrorException: 'unsupported operand type(s) for +: 'NoneType' and 'int''這個error
本篇文章回覆於2018-11-08 14:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

mikelouis
檢舉此回應
我將程式碼改成

然後把python 改成
就可以計算出結果36了,但是會一直跑出很多的0,請問為甚麼0.0??

本篇文章回覆於2018-11-08 15:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

春天
檢舉此回應
因為obj.welcome(line)是0,Console.Write()出來不就是0
本篇文章回覆於2018-11-08 16:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

mikelouis
檢舉此回應
您好 可是我是設定三秒跑一次TEST這個程式碼,但0是一直跑出來直到下一個36出現,請問我應該怎麼解決呢? 謝謝
本篇文章回覆於2018-11-09 09:21
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
最有價值解答

春天
檢舉此回應
MSDN上面都有寫
StreamReader.ReadToEnd Method
資料流從目前位置到末端的其餘字串。 如果目前位置位於資料流末端,則傳回空字串 ("")。
空字串經由python計算後為0
另外又因為While中的條件成立(回傳空字串,永遠不是null),所以形成無窮迴圈一直印出0
請問你有在Debug模式下看過嗎
本篇文章回覆於2018-11-09 09:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
作者回應

mikelouis
檢舉此回應
謝謝您的方法 我解決了~ 很抱歉 忙到忘記回了,謝謝您的回覆
本篇文章回覆於2018-11-14 11:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.