正在读取swift消息MT940

本文关键字:消息 MT940 swift 读取 | 更新日期: 2023-09-27 18:01:12

我正在阅读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(,我如何修改我的代码来处理它?

正在读取swift消息MT940

stackoverflow用户Jacob已经构建了一个开源库SharpMt940Lib。有了这个库,您可以解析一个mt940文件。我建议用这个库测试你的文件。我想,这会让事情变得容易得多。