在阅读Swift消息MT940时,它读起来很好,直到我遇到一个小问题。以下是我正在阅读的消息片段;
:61:140423C207430136,99S103R802316/103//3242612
3000024426
:86:/CODETYPTR/027
CBNINGLA
DBLNNGLA
SETL/1404230804+0000
:61:140423C50000000,S202TRONGNCASHSWAP1C//3242830
3000024426
:86:/CODETYPTR/001
FCMBNGLA
NONREF
SETL/1404230918+0000
这是我用来读这行的代码;
if (line.StartsWith(":61:"))
{
string strdateE = line.Substring(4, 6);
string dt = strdateE.Substring(0, 2) + "/" + strdateE.Substring(2, 2) + "/" + strdateE.Substring(4, 2);
inflow940.VALUE_DATE = DateTime.ParseExact(dt, "yy/MM/dd", null);
inflow940.DR_CR = line.Substring(10, 1);int sIndex = line.IndexOf('S');
inflow940.AMOUNT = decimal.Parse(line.Substring(11, sIndex - 11).Replace(',', '.'));
inflow940.TRXNTYPE_IDCODE = line.Substring(line.IndexOf('S'), 4);
string refr = line.Split(new string[] { "//" }, StringSplitOptions.None)[0];
string reft = "";
if (refr.Contains("S202"))
{
reft = refr.Replace("S202", "//");
}
if (refr.Contains("S103"))
{
reft = refr.Replace("S103", "//");
}
if (refr.Contains("S102"))
{
reft = refr.Replace("S102", "//");
}
if (refr.Contains("FTRF"))
{
reft = refr.Replace("FTRF", "//");
}
inflow940.REFERENCE = reft.Split(new string[] { "//" }, StringSplitOptions.None)[1];
pointer = 2;
}
上面的代码运行良好,但在部署解决方案后,我注意到正在读取的文件可以采用这种格式
:61:140423C7000000000,FTRFNONREF//3242445
3000024426
我的挑战:大多数消息总是带有S202,或嵌入在线内的S103或S102,我遇到一些相反的情况,如下面的这条消息(FTRF),我该如何修改我的代码来处理是什么?
答案 0 :(得分:3)
stackoverflow用户Jaco已经构建了一个开源库SharpMt940Lib。使用此库,您可以解析mt940文件。我建议用这个库测试你的文件。我想,这会让事情变得容易多了。