:58A:/C/81000098099CL
CBNINGLA
:72:/CODTYPTR/012
/CLEARING/0003
/SGI/DBLNNGLA
我正在尝试阅读上面的快速消息,行:58A:和行:72:,我有一点问题。我的代码只读取:58A:
这样的行C/81000098099CL
,但我希望它在到达行:72:
之前读取该行,简而言之,对于行{{{}},输出应该是这样的1}} :58A:
。
对于行C/81000098099CL CBNINGLA
也是如此,这是因为消息以这种形式格式化。这是我的代码
:72:
答案 0 :(得分:1)
您可以用空格(或空字符串)替换所有未跟:
的新行。
string output = Regex.Replace(text, @"\r?\n(?!:)", " ");
string[] lines = output.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string line in lines)
{
if (line.StartsWith(":58A:"))
{
}
else if (line.StartsWith(":72:"))
{
}
}
答案 1 :(得分:0)
如果消息总是以这种形式格式化,并且除了这些行启动器之外,文本中永远不会出现:
,请考虑首先通过:
将整个文本拆分为数组。在第0个位置将没有任何东西,在所有奇数位置上都是数字,在所有偶数位置将是直到下一个:
的内容。此解决方案将起作用,前提是您能够首先将整个输入读入单个字符串。即拥有string message
,您可以执行以下操作:
var splitted = message.Split(':');
for (i=1;i<= splitted.Length -1; i+=2){
if (splitted[i] == "58A") {
//do what you need to do, the text you need is stored in splitted[i+1]
}
...
}