首页 > 解决方案 > 如何从 C# 中的字符串中提取非常特定的部分并在 winform 应用程序中使用它们?

问题描述

我有数据通过串口输入。目前,我正在接收它并在每个“,”处拆分它(参见代码以供参考)。现在,我正在使用(for each)函数,它使遇到的每个逗号都产生子字符串@。但我不想要这个。

可以说,我需要的是从 String1 中仅提取 ALPHA、BRAVO 和 CHARLIE,如果数据丢失,如 String2 中所示,我的提取也应该导致空子字符串。

问题是这些数据来自 GPS 设备,如果信号强度不好,则字符串为空,即只有逗号。因此,字符串长度可以轻微或剧烈变化(String1 表示完整的字符串,而 String2 表示有遗漏的字符串)。

字符串 1:$GPBWC,220516,ALPHA,00046.34,BRAVO,T,CHARLIE,0004.6,N,EGLM*11

字符串2:$GPBWC,,,0,BRAVO,,,,N,EGLM*11

我了解之前已经提出了一些相关问题,但我无法找到足够强大的解决方案。因此,我们将不胜感激任何和所有的帮助。

代码:

private string serialRx = string.Empty;

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    serialRx += serialPort1.ReadExisting();                                              
    string[] lines = serialRx.Split(new char[] { '$' }, 
    StringSplitOptions.None);        

    for (int i = 0; i < lines.Length - 1; i++)                                          
    {
        if (lines[i].StartsWith("GPGSV"))                                                
        {
            string[] values = lines[i].Split(new char[] { ',' });                       

            foreach (var value in values)
            {
                Invoke(new Action(() => displaySplits(value)));
            }                   

            Invoke(new Action(() => displayReceivedText(lines[i])));           
        }
    }
}

标签: c#stringparsingsplitserial-port

解决方案


推荐阅读