0

次のような入力ファイルがあります。

入力ファイル

@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);

} }

しかし、私はまだファイル内の更新された値を取得していません。

4

2 に答える 2