【问题标题】:Parse Number Data from Letters C#从字母 C# 中解析数字数据
【发布时间】:2012-07-03 18:11:17
【问题描述】:

我正在尝试解析从我创建的 arduino 机器人获得的数据。我目前有我的串行程序启动并运行,我能够监控我的计算机发送和接收的数据。

我试图从机器人获得的数据包括:速度、范围和航向。从 arduino 发送的数据是浮点数。

我使用单个字符来表示通过 S、R 或 H 接收的数据是什么。例如: R150.6

这表示这是范围数据,150.6 将是更新程序的新范围。

由于这是我的第一个 c# 程序,我在试图找出使用 c# 解析它的最佳方法时有点卡住了。

我尝试过使用类似的代码:

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

我在网站上阅读到使用正则表达式,但是我很难弄清楚如何将其合并到我的代码中。

这是我用来指导的链接:

String parsing, extracting numbers and letters

【问题讨论】:

  • 你的例子是调用 double.Parse("R150.6")。在尝试解析数字之前,您至少希望删除第一个数字。

标签: c# parsing arduino


【解决方案1】:

你快到了。如果您总是以单个字母开头,请尝试Range = double.Parse(RxString.Substring(1))。它将从第二个字符开始读取。

【讨论】:

  • 我按照你的说法输入了它,但是我发现我的数字被分成小数点。所以一行说:147,下一行显示一个 0。我不知道这是否与我的 Parse 或我使用命令将双精度转换为字符串有关。这是我正在使用的命令:textBox1.AppendText(Range.ToString());
【解决方案2】:

我可以使用正则表达式来查找双精度:

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

使用:

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

如果您的字母在字符串中迁移或添加其他符号,它保证从字符串中获取第一个小数

【讨论】:

  • 这可以正常工作,但是在这种情况下,正则表达式是一种从字符串中删除字符的非常昂贵的方法。
【解决方案3】:

既然你知道返回数据的格式,你可以试试这样的

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 2017-12-15
    • 2011-04-03
    相关资源
    最近更新 更多