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

本文关键字:文本 读取 开头 如果 | 更新日期: 2023-09-27 17:59:24

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

我试图阅读上面的swift消息,第58A行:第72行:我有一个小问题。我的代码只读取像C/81000098099CL这样的:58A:行,但我希望它在到达:72:行之前向下读取,简而言之,:58A:C/81000098099CL CBNINGLA行的输出应该是这样的。

:72:行也是如此,这是因为消息的格式是这样的。这是我在下面的代码

if (line.StartsWith(":58A:"))
{
    string[] narr = line.Split('/');
    inflow202.BENEFICIARY_INSTITUTION = narr[2];
}
if (line.StartsWith(":72:"))
{
    inflow202.RECEIVER_INFORMATION = line.Substring(5);
}

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

您可以用空格(或空字符串(替换所有未跟:的新行。

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:"))
    {
    }
}

如果消息总是以这种形式格式化,并且除了这些换行符之外,文本中从未出现:,请考虑首先通过:将整个文本拆分为一个数组。在第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]
   }
   ...
}