繁体   English   中英

如何在 C# 中切断来自串口的字符串?

[英]How to cut string coming from serial port in C#?

我从串行端口接收数据,并使用ReadLine获取此数据。 这是数据:

#MASTERPOSA,COM1,0,21.5,FINESTEERING,1544,340322.000,02000008,5009,4655;
SOL_COMPUTED,NARROW_INT,51.11604599076,-114.03855412002,1055.7756,16.9000,
WGS84,0.0090,0.0086,0.0143,"AAAA",0.0,0.0,13,13,13,12,0,0,0,0*a72e8d3f

我想获取数据直到AAAA ,即

#MASTERPOSA,COM1,0,21.5,FINESTEERING,1544,340322.000,02000008,5009,4655;
SOL_COMPUTED,NARROW_INT,51.11604599076,-114.03855412002,1055.7756,16.9000,
WGS84,0.0090,0.0086,0.0143

我使用了TrimEnd方法,但它不起作用:

textBox2.Text = data.TrimEnd(' ', '"').ToString();

使用Substring()方法将字符串从第一个索引“剪切”到“,AAAA”的索引

private static void Example()
{
  string target = "#MASTERPOSA,COM1,0,21.5,FINESTEERING,1544,340322.000,02000008,5009,4655; SOL_COMPUTED,NARROW_INT,51.11604599076,-114.03855412002,1055.7756,16.9000, WGS84,0.0090,0.0086,0.0143,\"AAAA\",0.0,0.0,13,13,13,12,0,0,0,0*a72e8d3f";
  string newstring = target.Substring(0, target.IndexOf(",\"AAAA\""));
  Console.WriteLine(newstring);
}

您可能会先找到"AAAA"索引(带有转义的双引号),然后使用Substring方法

var index = str.IndexOf("\"AAAA\"", StringComparison.Ordinal);
var result = str.Substring(0, index - 1);

它为您提供以下结果

#MASTERPOSA,COM1,0,21.5,FINESTEERING,1544,340322.000,02000008,5009,4655; SOL_COMPUTED,NARROW_INT,51.11604599076,-114.03855412002,1055.7756,16.9000,WGS84,0.0090,0.0086,0.0143

string text = "#MASTERPOSA,COM1,0,21.5,FINESTEERING,1544,340322.000,02000008,5009,4655; SOL_COMPUTED,NARROW_INT,51.11604599076,-114.03855412002,1055.7756,16.9000, WGS84,0.0090,0.0086,0.0143,\"AAAA\",0.0,0.0,13,13,13,12,0,0,0,0*a72e8d3f";
    
Regex regex = new Regex($"(^.*?)(\"AAAA\")", RegexOptions.IgnoreCase);//or other options

string newstring =  regex.Match(text).Groups[1].Value;

您可以使用任何正则表达式。 在这个例子中:

  • Groups[0]:带有"AAAA"的必需文本
  • Groups[1]:不带"AAAA"必填文本
  • 组[2]: "AAAA"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM