我正在阅读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),我如何修改代码来处理这个问题?
发布于 2014-05-02 11:17:27
堆栈溢出用户雅科已经构建了一个开源库SharpMt940Lib。使用这个库,您可以解析一个mt940文件。我建议用这个库来测试你的文件。我想这让事情变得容易多了。
https://stackoverflow.com/questions/23424016
复制相似问题