我被赋予了反序列化某些数据的任务。数据全部被编入一个字符串,格式如下:
InternalNameA8ValueDisplay NameA¬InternalNameB8ValueDisplay NameB¬
等等。
(即,它有一个内部名称,'8',值,显示名称,后跟'¬'**)。例如,你有FirstName8JoeFirst Name¬
我无法控制这些数据是如何序列化的,它是传统的东西。
我曾经想过在字符串上做一堆拆分,或者把它分解成一个char数组并按照这种方式拆分文本。但这似乎很可怕。这种方式太多可能出错(例如,如果电话号码的值(例如),可以以'8'开头。
我想知道的是人们对此的看法是什么?我能做些什么来打破数据
注意:'¬'实际上不是角色,它看起来更像是指向左侧的箭头。但此刻我离开了我的机器。卫生署!
感谢。
答案 0 :(得分: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;
}
处理不稳定的格式 - 总是很开心!
祝你好运, 埃里克