2012-07-03 2 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)). Он будет читать со второго символа.

+0

Я ввел его, как вы заявили, однако я нахожу, что мои числа становятся разделенными на десятичную. Итак, одна строка говорит: 147, а следующая показывает 0. Я не знаю, связано ли это с моим парсером или тем фактом, что я использую команду для преобразования из double в строку. Это команда, которую я использую: textBox1.AppendText (Range.ToString()); –

0

я могу использовать регулярное выражение для поиска дважды:

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

с помощью:

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

это Гарантии, чтобы получить первый десятичный из строки, если ваше письмо мигрирует в строке или добавить другие символы

+1

Это будет прекрасно работать, однако в этом случае регулярное выражение является довольно дорогостоящим способом удаления символа из строки. –

+0

, но это будет какая-то работа –

0

Поскольку вы знаете формат возвращаемых данных, вы можете попробовать что-то вроде этого

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

if(data == "R") 
    range = double.Parse(value); 
Смежные вопросы