阅读swift消息MT940

时间:2014-05-02 08:38:25

标签: c# mt940

在阅读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),我该如何修改我的代码来处理是什么?

1 个答案:

答案 0 :(得分:3)

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