如果以特定标记开头,则读取多行文本

时间:2014-04-22 11:57:33

标签: c#

:58A:/C/81000098099CL
CBNINGLA
:72:/CODTYPTR/012
/CLEARING/0003
/SGI/DBLNNGLA

我正在尝试阅读上面的快速消息,行:58A:和行:72:,我有一点问题。我的代码只读取:58A:这样的行C/81000098099CL,但我希望它在到达行:72:之前读取该行,简而言之,对于行{{{}},输出应该是这样的1}} :58A:

对于行C/81000098099CL CBNINGLA也是如此,这是因为消息以这种形式格式化。这是我的代码

:72:

2 个答案:

答案 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]
   }
   ...
}