0

这是来自串行工具运行 6 次以上的数据。我必须能够一致地解析每一行数据。

有没有人对我如何修复这些数据有建议,以便我可以确保它的完整性?

\r\n第一行的末尾确实有一个。有时它会破坏排队,有时它会在随机位置破坏它。我什至不能确定它不会侵蚀数据包编号后面的十六进制的重要数据。如果我能确保数据是健全的,我就可以做类似的事情value.Split(':')[1].Split(' ')[1]并完成它。我只是想不出任何方法将它拼接在一起。此外,需要明确的是,整个数据集都在一个字符串中,因为它必须从工具中读取。所以,我只是在做string[] values = message.Split('\n');然后用foreach循环迭代。

Packe
t 0: 1A064140084243440842555803EE (overlay)
Packet 1: 1A06414258404643440842585503EE
Packet 2: 1D0608054203EE
Packet 3: 1D0608427273747571505703EE
...


Packet 0: 1A064140084243440842555803EE (overlay)
Packet 1: 1A06414258404643440842585503EE
Packet 2: 1D0608054203EE
Packet 3: 1D0608427273747571505703EE
...


P
acket 0: 1A064140084243440842555803EE (overlay)
Packet 1: 1A06414258404643
Packet 2: 1D0608054203EE
Packet 3: 1D0608427273747571505703EE
...


Packet 0
: 1A064140084243440842555803EE (overlay)
Packet 1: 1A06414258404643440842585503EE
Packet 2: 1D0608054203EE
Packet 3: 1D0608427273747571505703EE
...


Pack
et 0: 1A064140084243440842555803EE (overlay)
Packet 1: 1A06414258404643440842585503EE
Packet 2: 1D0608054203EE
Packet 3: 1D0608427273747571505703EE
...


Packet 0: 1A064140084243440842555803EE (overlay)
Packet 1: 1A06414258404643440842585503EE
Packet 2: 1D0608054203EE
Packet 3: 1D0608427273747571505703EE
...
4

1 回答 1

1

对 Offler 提到的内容 +1:

  1. 去除 \r\n 的变体
  2. 正则表达式按“数据包#:”分组。在此之后直到下一个数据包条目的所有内容都是您想要的。
  3. Regex.Split 分组
  4. 根据需要清理数据

这是一个粗略的划痕程序来说明:

        var reader = new StreamReader("Test.txt");
        var contents = reader.ReadToEnd();
        var strippedContents = contents.Replace("\r\n", "").Replace("\r", "").Replace("\n", "");
        var regex = new Regex(@"(?<packet>Packet \d+: )");
        var matches = regex.Split(strippedContents);

Test.txt 只是结合了第一和第三部分“Packe\r\n”和“P\r\n”的数据,但我保持信息的顺序,部分之间没有任何空格。

上面的数字 4 不在临时程序中,但数据在数组的每个奇数索引处都有 Packet 部分,索引 0 是一个空字符串 ("")。它并不优雅,但您实际上是在告诉 Regex“匹配除此之外的所有内容”。

这可能不是最终的解决方案,但它至少应该让你开始。

于 2013-02-04T22:57:46.963 回答