0

我被赋予了反序列化一些数据的任务。数据已全部转换为以下格式的字符串:

InternalNameA8ValueDisplay NameA¬InternalNameB8ValueDisplay NameB¬等等等等

(即,它有一个内部名称“8”、值、显示名称,后跟“¬”**)。例如,你会有FirstName8JoeFirst Name¬

我无法控制这些数据是如何序列化的,它是遗留的东西。

我曾想过对字符串进行一堆拆分,或者将其拆分为一个 char 数组并以这种方式拆分文本。但这似乎很可怕。这种方式有太多可能出错的地方(例如,如果电话号码的值(例如)可能以“8”开头。

我想知道的是人们对此的态度是什么?有什么更聪明的方法可以分解数据吗

注意: “¬”实际上不是字符,它看起来更像是一个指向左侧的箭头。但我现在不在我的机器旁。嗬!

谢谢。

4

1 回答 1

1

我建议不要使用拆分,而是使用简单的状态机。遍历每个字符,直到遇到分隔符,然后您就知道您在下一个字段上。这可以解决电话号码中的“8”之类的问题。

注意 - 前面有未经测试的代码。

var fieldValues = new string[3];
var currentField = 0;
var line = "InternalNameA8ValueDisplay NameA¬InternalNameB8ValueDisplay NameB¬";

foreach (var c in line)
{
    if (c == '8' && currentField == 0)
    {
        currentField++; continue;
    }

    if (c == '¬')
    {
        currentField++; continue;
    }

    fieldValues[currentField] += c;
}

处理不稳定的格式 - 总是一个好时机!

祝你好运,埃里克

于 2013-04-16T19:59:33.897 回答