如果文本以特定标记开头,则读取多行文本
本文关键字:文本 读取 开头 如果 | 更新日期: 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]
}
...
}