我有一个这样的输入文件:
我需要用 , 的值替换 .. 的值,@pSBSB_ID="*"
并且必须删除 ' 所在的行@rectype=@pRECTYPE="SBSB"
@pMEME_SSN="034184233"
@pRECTYPE="SMSR"
@rectype='@pRECTYPE="SMSR",
示例:因此,在进行更改后,文件应如下所示:
....@pRECTYPE="SBSB", @pGWID="17199269", @pINPUT_METHOD="E", @pGS08="005010X220A1", @pSBSB_FAM_UPDATE_CD="UP", @pSBSB_ID="034184233".....
....@pRECTYPE="SBEL", @pSBEL_EFF_DT="01/01/2013", @pSBEL_UPDATE_CD="TM", @pCSPD_CAT="M", @pCSPI_ID="MHMO1003"
.
.
.
更新
我尝试了下面提到的代码:输入文件扩展名:mms,并且有多个文件要处理。
my $save_for_later;
my $record;
my @KwdFiles;
my $r;
my $FilePath = $ARGV[0];
chdir($FilePath);
@KwdFiles = <*>;
foreach $File(@KwdFiles)
{
unless(substr($File,length($File)-4,length($File)) eq '.mms')
{
next;
}
unless(open(INFILE, "$File"))
{
print "Unable to open file: $File";
exit(0);
}
print "Successfully opened the file: \"$File\" for processing\n\n";
while ( my $record = <INFILE> ) {
my %r = $record =~ /\@(\w+) = '(.*?)'/xg;
if ($r{rectype} eq "SMSR") {
$save_for_later = $r{pMEME_SSN};
next;
}
elsif ($r{rectype} eq "SBSB" and $r{pSBSB_ID} eq "*") {
$record =~ s|(\@pSBSB_ID = )'.*?'|$1'$save_for_later'|x;
}
close(INFILE);
} }
但是,我仍然没有得到文件中的更新值。