我有一个需要解析的数据流。流逐行发送并采用以下形式:
ID: XXX Data: XX XX XX XX XX XX XX XX
其中X's
是十六进制字符,即:
ID: 1F9 Data: AC 12 53 8F 14 11 FF 00 -> For example
技巧是不总是有8个数据字节,所以这些传输也是可能的:
ID: XXX Data: XX
ID: XXX Data: XX XX
ID: XXX Data: XX XX XX
ID: XXX Data: XX XX XX XX
ID: XXX Data: XX XX XX XX XX
ID: XXX Data: XX XX XX XX XX XX
ID: XXX Data: XX XX XX XX XX XX XX
ID: XXX Data: XX XX XX XX XX XX XX XX
我想编写一个正则表达式,可以解析每个传输的ID和可用数据字节。然后我需要将字节存储在数组中以分配给dataGridView。
如何编写模式来实现此目的?有没有更好的方法将值分配给dataGridView中的行而不是分配给数组?执行时间需要优化。
谢谢!
答案 0 :(得分:1)
您可以使用以下代码。它首先拆分输入字符串,然后将值选择为适当的变量:
注意:您可以直接使用split
变量,ID在索引1中,值从2开始。忽略第一个元素,因为它包含空字符串。
String input = "ID: 1F9 Data: AC 12 53 8F 14 11 FF 00";
String pattern = @"ID:\s|\s\sData:\s|\s";
string[] split = Regex.Split(input, pattern);
string id = split[1]; // the first elements contains "" so ignore it
string[] values = new string[split.Length - 2];
for (int i = 2; i < split.Length; i++)
values[i - 2] = split[i];