我每天都要处理来自十个不同银行账户的财务系统中的文本文件(MT940)。为了能够改进银行对账单的处理,我想充实这些文件。基本上通过用其他东西替换银行交易代码(在本例中为NMSC)或对交易描述(:86:线)更可读。文件可能看起来像:
:20:
:25:MHCBNL2AXXX/0265515777
:28C:27/
:60F:C200207EUR100196,42
:61:2002070207D1326,80NMSCTOPF1450330305SDD TOPF1450330305
:86:FR601810010131670100ARVAL FRANCE BBB200210505254134245678815001141818
:61:2108240824D1976,72NMSCTOPF2140474819//GABK002SCT TOPF2123454819--AA--
:86:ABCWNLXXOBGNL953123450004107181ARIANA GRANDED127139012108000003Gehalt 8/2021--AA--
:61:2108240824D3581,11NMSCTOPF2140474818//GABK006SCT TOPF2140474818--BB--
:86:ABCANLWWXXXNL402011456789701498LADY GAGAD127139012108000002Gehalt 8/2021--BB--
:61:2108240824D3742,44NMSCTOPF2140474817//GABK004SCT TOPF2140474817--CC--
:86:CXWANLWWAT201456787210005293SHEERAN EDD127139012108000001Gehalt 8/2021--CC--
:61:2105250525D3742,44NMSCTOPF2025434704SCT TOPF2025434704
:86:CXWANLWWAT201456787210005293SHEERAN EDGCMS000039851534Salary
:61:2105250525D3581,11NMSCTOPF2025434705SCT TOPF2025434705
:86:ABCANLWWXXXNL402011456789701498LADY GAGAGCMS000039851545Salary
:61:2105250525D1976,72NMSCTOPF2025434706SCT TOPF2025434706
:86:ABCWNLXXOBGNL953123450004107181ARIANA GRANDEGCMS000039851576Salary
:62F:C200207EUR39752,98
我想做以下事情:
1.在以:61开头的行中:并且有SDD,我想用RDDT代替NMSC。
1.如果一行以:86:并且其中包含单词Salary或Gehalt,我想用SALA替换前一行(以:61:开头的行)中的NMSC。
我这样做是为了:
switch -Regex ($MT940)
{
'^:61:[0-9]{1,6}.+D\d+\,?\d*NMSCTOPF\d+SDD TOPF\d*'
{ $_ -replace 'NMSC' ,'RDDT' }
'^:61:[0-9]{1,6}[0-9]{4}D[0-9]+\,[0-9]?[0-9]?NMSCTOPF\d+.+SCT.+'
{$saved = $_ ; continue}
'^:86:.+salar.+|^:86:.+Gehalt.+'
{$saved -replace "NMSC" , 'SALA' ;$_}
default
{ $_ } # unrelated line, pass through
}
这给出以下结果:
>>:20:
>>:25:XXXXXXXXXXXXXXXXXXXXXXX
>>:28C:27
>>:60F:C200207EUR100000,00
>>:61:2012311231D0000,1RDDTTOPF1234567890SDD TOPF1234567890
>>:86:FR1234567890ARVAL FRANCE
>>:61:2108240824D0000,01SALATOPF2140474819//GABK002SCT TOPF2123454819--AA--
>>:86:ARIANA GRANDED12713901210Gehalt 8/2021--AA--
>>:61:2108240824D0000,01SALATOPF2140474818//GABK006SCT TOPF2140474818--BB--
>>:86:LADY GAGA127139012108000002Gehalt 8/2021--BB--
>>:61:2108240824D0000,01SALATOPF2140474817//GABK004SCT TOPF2140474817--CC--
>>:86:SHEERAN EDD127139012108000001Gehalt 8/2021--CC--
>>:61:2108240824D0000,01NMSCTOPF2025434704SCT TOPF2025434704 AA
**>>:61:2108240824D0000,01SALATOPF2140474817//GABK004SCT TOPF2140474817--CC--**
>>:86:SHEERAN EDGCMS000039851534Salary AA
>>:61:2108240824D0000,01NMSCTOPF2025434705SCT TOPF2025434705 BB
**>>:61:2108240824D0000,01SALATOPF2140474817//GABK004SCT TOPF2140474817--CC--**
>>:86:ABCANLWWXXXNL402011456789701498LADY GAGAGCMS000039851545Salary BB
>>:61:2108240824D0000,01MSCTOPF2025434706SCT TOPF2025434706 CC
**>>:61:2108240824D0000,01SALATOPF2140474817//GABK004SCT TOPF2140474817--CC--**
>>:86:ABCWNLXXOBGNL953123450004107181ARIANA GRANDEGCMS000039851576Salary CC
>>:61:2012311231D0000,1RDDTTOPF0987654321SDD TOPF0987654321
>>:86:FR1234567890ARVAL FRANCE
>>:62F:C200207EUR39752,98
问:我不明白的是为什么在**之间插入了标记的行。
1条答案
按热度按时间wj8zmpe11#
显然,通过在末尾添加
$
来解决这个问题,表示行的结尾。我不明白为什么,它会导致其他线路(前两条:61:线)消失。