2012-07-03 55 views
2

我想解析我從創建的arduino機器人獲取的數據。我目前已經啓動並運行了我的串行程序,並且可以監視由我的計算機發送和接收的數據。解析來自字母C的數字數據#

我試圖從機器人獲得的數據包括:速度,範圍和標題。從arduino發送的數據是浮點數。

我使用單個字符來表示正在接收什麼數據由任一一個S,R或H.例如: R150.6

這表示這是範圍數據和150.6將是用於更新程序的新範圍。

我有點卡住試圖找出解析這個使用C#的最佳方式,因爲這是我的第一個C#程序。

我有一個類似的代碼嘗試:

if (RxString[0] == 'R') 
      Range = double.Parse(RxString); 

我閱讀網站使用正則表達式的,但我有一個很難弄清楚如何將其納入我的代碼。

這是我使用指導的鏈接:

String parsing, extracting numbers and letters

+0

你的例子是調用double.Parse(「R150.6」)。在嘗試解析數字之前,您至少需要刪除第一位數字。 – Wug

回答

4

你幾乎沒有。如果您始終以單個字母開頭,請嘗試Range = double.Parse(RxString.Substring(1))。它會從第二個字符讀取。使用

\d+([,\.]\d+)? 

+0

我按照你所說的輸入了它,但是我發現我的數字在小數點被分割。所以一行說:147和下一個顯示0.我不知道這是否與我的解析或我使用一個命令從雙重轉換爲字符串的事實。這是我正在使用的命令:textBox1.AppendText(Range.ToString()); –

0

我可以使用正則表達式查找雙

Regex re = Regex.Match("R1.23", "\d+([,\.]\d+)?"); 
if (re.Success) 
{ 
    double @double = Convert.ToDouble(re.Value, System.Globalization.CultureInfo.InvariantCulture); 
} 

它garanties擺脫字符串第一位小數,如果你的信中的字符串或添加遷移其他符號

+1

這將工作得很好,但在這種情況下,正則表達式是從字符串中移除字符的相當昂貴的方式。 –

+0

但它會以任何方式工作 –

0

既然你知道返回數據的格式,你可以嘗試這樣的事情:

data = RxString.SubString(0,1); 
value = RxString.SubString(1, RxString.Length-1); 

if(data == "R") 
    range = double.Parse(value);