ISSU------__DCR2?DC???_YYYYMMDD_HHMMSS_USER-ID---_nnnnnnnn.??? ISSU------__??????????_YYYYMMDD_HHMMSS_USER-ID---_nnnnnnnn.??? ISSU------ denotes - 4 character Issuer code #### ABC-_DCR2FDCGBP_20151014_093010_ABCFBTEST3_00000000.DAT ABC-_DCR2FDCGBP_20151014_093010_ABCFBTEST3_00000000.RPT #### ISSU------__CQB???_YYMMDD_HHMMSS_---.??? Name of a sample file: ABC-_BOANZD_151013034247_589.TXT #### Issuer code - 4 characters Underscore Bank id - Always CQB ( 3 characters) Currency code - for example AUD, NZD etc for autralian dollar, new zealand dollar etc Underscore Date - in YYMMDD format - 6 digit date Time - in hhmmss format - 6 digit time Underscore File counter - 3 digits file counter or sequence Dot Extension - 3 digit (it should be TXT) #### #******************************************************************************* # Report Title : sample file #******************************************************************************* $PROG = $0; use Env qw(SPOOL_LOC); @Args = @ARGV ; # Define Subroutines sub logfile { my ($lineno) = @_[0] ; my ($logmsg) = @_[1] ; $syscmd = "perl " . $SPOOL_LOC . $delimiter . "spool_logs.pl $SPOOL_LOC" . $delimiter . "logs $spool_name \"Success\" $origname $lineno \"" . $logmsg . "\""; system($syscmd); } sub abort { my ($lineno) = @_[0] ; my ($logmsg) = @_[1] ; print __LINE__,"$PROG: @_\n"; $syscmd = "perl " . $SPOOL_LOC . $delimiter . "spool_logs.pl $SPOOL_LOC" . $delimiter . "logs $spool_name \"Failed\" $origname $lineno \"" . $logmsg . "\""; system($syscmd); exit 1; } # Get the filename from the args $filename = shift; $origname = $filename; ($exportlocn,$exportfile) = $filename =~ m|^(.*[/\\])([^/\\]+?)$|; # set the OS delimiter if ($^O eq "MSWin32") { $delimiter='\\'; } elsif ($^O eq "linux") { $delimiter='/'; } else { $delimiter='/'; } if ($delimiter eq "/") { @script_bits = split(/\//, $PROG); } else { @script_bits = split(/\\/, $PROG); } @spool_bits = split(/\./,@script_bits[-1]); $spool_name = @spool_bits[0]; $spool_name =~ tr/[a-z]/[A-Z]/; print __LINE__,"\n\nSpool ** $spool_name ** is processing file $filename.\n\n"; print __LINE__,"\nOperating System is: $^O\n\n"; # Must have 1 arg. @Args == 1 || @Args == 2 or abort __LINE__,"expected 1 or 2 arguments"; $ENV_NAME = join( ',' , $script_bits[-2]) ; # Configuration constants. @UNZIP = qw (gzip); @PRINT = qw (print); @MOVE = qw (move); @COPY = qw (copy); @PRIVS = qw (icacls); if ($delimiter eq "/") { @UNZIP = qw (gzip); @PRINT = qw (lp); @MOVE = qw (mv); @COPY = qw (cp); } $ROOTSYS = "D:\\LMS\\output\\" . $ENV_NAME . "\\sydrpm"; if ($ENV_NAME eq "prd") { $ROOTSYS = "\\\\sydrpm\\spool\$"; if ($delimiter eq "/") { $ROOTSYS = "/mnt/smb/lms-au/sydrpm/spool\$"; } } else { if ($delimiter eq "/") { $ROOTSYS = "/mnt/smb/lms-au/lmshbdv06/LMS/output/" . $ENV_NAME . "/sydrpm"; } } $SMPLDIR = $ROOTSYS . $delimiter . "bnerpm" ; # Check and create default directories -d $ROOTSYS or mkdir $ROOTSYS, 0777 or abort __LINE__,"failed to make spool directory '$ROOTSYS'."; -d $SMPLDIR or mkdir $SMPLDIR, 0777 or abort __LINE__,"failed to make spool directory '$SMPLDIR'."; $ROOTDIR = $SMPLDIR . $delimiter . "Restricted"; $CA_FILE = "CA_Files"; $BANKFILE = "Bankfiles"; $DUPDIR = $SMPLDIR . $delimiter . "duplicate"; $UNHANDLED = $SMPLDIR . $delimiter . "unhandled"; # Main. # Get current Time ($SEC, $MIN, $HOUR, $DAY, $MON, $YEAR) = localtime; # increment the month (0-11) $MON++; # Calc YYYY Year $YEAR += 1900; # Prep duplicate file extension $dupe_extn = sprintf ("-%02d-%02d-%02d_%02d-%02d-%04d", $HOUR, $MIN, $SEC, $DAY, $MON, $YEAR) ; # Check and create default directories -d $ROOTDIR or mkdir $ROOTDIR, 0777 or abort __LINE__,"failed to make Restricted directory '$ROOTDIR'."; -d $DUPDIR or mkdir $DUPDIR, 0777 or abort __LINE__,"failed to make duplicate directory '$DUPDIR'."; -d $UNHANDLED or mkdir $UNHANDLED, 0777 or abort __LINE__,"failed to make unhandled directory '$UNHANDLED'."; # Check if the filename exists -f $filename or abort __LINE__,"$filename does not exist"; # Get the Printer from the second arg #($printer) = @ARGV; # remove "\" or "/" from filename if ($delimiter eq "/") { ($basename = $filename) =~ s/.*\///; } else { ($basename = $filename) =~ s/.*\\//; } # # Care needs to be taken as the full file name (containing the path) is # sent to the RPM server. # # Validate Filename Structure unless ($basename =~ /^(.{4}|.{10})_(.{10})_(.{8})_(.{6})_(.{10})_(.{8})\.(.{3})(\.gz)?$/) { if ((system @COPY, $filename, sprintf "%s%s%s%s", $UNHANDLED, $delimiter, $basename, $dupe_extn) == 0) { abort __LINE__,"bad filename '$filename', moved to unhandled directory"; } else { abort __LINE__,"failed to move unhandled file '$filename'!"; } } else { # # File Name Format Fits # ($issuercode, $outputname, $date, $time, $userid, $sequenceno, $filetype) = ($1, $2, $3, $4, $5, $6, $7); } # Validate the Issuer Code (Fund Manager) $issuercode =~ s/^([A-Za-z0-9]+)-*/$1/i or abort __LINE__,"filename '$basename': bad issuer code '$issuercode'"; # Uppercase the Issuer $issuercode =~ tr/[a-z]/[A-Z]/; # Uppercase the Output Name $outputname =~ tr/[a-z]/[A-Z]/; # Validate the Report $outputname =~ s/^(\w+)*/$1/i or abort __LINE__,"filename '$basename': bad output name '$outputname'"; $CA_FILE_DIR = $ROOTDIR . $delimiter . $CA_FILE; $BANKFILEDIR = $ROOTDIR . $delimiter . $BANKFILE; $FileType = 1; if ($outputname =~ /(DCR2).(DC).*$/) { $FileType = 2; } -d $CA_FILE_DIR or mkdir $CA_FILE_DIR, 0777 or abort __LINE__,"failed to make directory '$CA_FILE_DIR'."; -d $BANKFILEDIR or mkdir $BANKFILEDIR, 0777 or abort __LINE__,"failed to make directory '$BANKFILEDIR'."; $date =~ /^\d{8}$/ or abort __LINE__,"filename '$basename': bad date '$date'"; $sdate = substr $date, 0, 6; $time =~ /^\d{6}$/ or abort __LINE__,"filename '$basename': bad time '$time'"; $userid =~ s/^([A-Za-z0-9]+)-*/$1/i or abort __LINE__,"filename '$basename': bad userid '$userid'"; $sequenceno =~ /^\d{8}$/ or abort __LINE__,"filename '$basename': bad sequence number '$sequenceno'"; $filetype =~ /^[a-z]{3}$/i or abort __LINE__,"filename '$basename': bad file type '$filetype'"; # # Create the Issuer Directory # $issuerdir = $CA_FILE_DIR . $delimiter . $issuercode; $dateDir = $issuerdir . $delimiter . $sdate ; -d $issuerdir or mkdir $issuerdir, 0777 or abort __LINE__,"failed to make directory '$issuerdir'."; # Create the if it does not exist -d $dateDir or mkdir $dateDir, 0777 or abort __LINE__,"failed to make directory '$dateDir'."; $BankIssuerDir = $BANKFILEDIR . $delimiter . $issuercode; $BankDateDir = $BankIssuerDir . $delimiter . $sdate ; if ($FileType == 2) { -d $BankIssuerDir or mkdir $BankIssuerDir, 0777 or abort __LINE__,"failed to make directory '$BankIssuerDir'."; # Create the if it does not exist -d $BankDateDir or mkdir $BankDateDir, 0777 or abort __LINE__,"failed to make directory '$BankDateDir'."; } $Unzipfile = 1 ; $filename =~ /^.+\.gz$/ or $Unzipfile = 0 ; $filename =~ s/\.gz$//i; $exportfile =~ s/\.gz$//i; $basename =~ s/\.gz//i; $movename = $basename; $movelocn = $dateDir . $delimiter . $movename ; $BankCopyLocn = $BankDateDir . $delimiter . $movename ; # # unzip the file # if ($Unzipfile == 1) { ! -f $filename or unlink $filename or abort __LINE__,"could not unlink '$filename'."; (system "@UNZIP -d < $filename.gz > $filename") == 0 or abort __LINE__,"unzip of $filename failed!"; } #if (defined $printer) { # (system @PRINT, $filename) == 0 # or print __LINE__,"warning: failed to print $filename\n"; #} if ($FileType == 2) { if (! -f "$BankCopyLocn") { (system @COPY, $filename, $BankCopyLocn) == 0 or abort __LINE__,"copy $filename to $BankCopyLocn failed."; logfile __LINE__,"copied $filename to $BankCopyLocn."; if ($^O eq "MSWin32") { (system @PRIVS, "$BankDateDir$delimiter$exportfile","/reset") == 0 or abort __LINE__,"Inheritance reset for $exportfile in $BankDateDir failed."; } } } if (! -f "$movelocn") { if ($Unzipfile == 1) { (system @MOVE, $filename, $movelocn) == 0 or abort __LINE__,"move $filename to $movelocn failed."; logfile __LINE__,"moved $filename to $movelocn."; if ($^O eq "MSWin32") { (system @PRIVS, "$dateDir$delimiter$exportfile","/reset") == 0 or abort __LINE__,"Inheritance reset for $exportfile in $dateDir failed."; } } else { (system @COPY, $filename, $movelocn) == 0 or abort __LINE__,"copy $filename to $movelocn failed."; logfile __LINE__,"copied $filename to $movelocn."; if ($^O eq "MSWin32") { (system @PRIVS, "$dateDir$delimiter$exportfile","/reset") == 0 or abort __LINE__,"Inheritance reset for $exportfile in $dateDir failed."; } } } else { print __LINE__,"warning: '$basename' already exists in $dateDir, moving $filename to duplicate directory\n"; if ($Unzipfile == 1) { (system @MOVE, $filename, sprintf "%s%s%s%s", $DUPDIR, $delimiter, $basename, $dupe_extn) == 0 or abort __LINE__,"move of $filename failed."; logfile __LINE__,"warning: '$basename' already exists in $dateDir, moving $filename to duplicate directory"; if ($^O eq "MSWin32") { (system @PRIVS, "$DUPDIR$delimiter$exportfile$dupe_extn","/reset") == 0 or abort __LINE__,"Inheritance reset for $exportfile$dupe_extn in $DUPDIR failed."; } } else { (system @COPY, $filename, sprintf "%s%s%s%s", $DUPDIR, $delimiter, $basename, $dupe_extn) == 0 or abort __LINE__,"copy of $filename failed."; logfile __LINE__,"warning: '$basename' already exists in $dateDir, copying $filename to duplicate directory"; if ($^O eq "MSWin32") { (system @PRIVS, "$DUPDIR$delimiter$exportfile$dupe_extn","/reset") == 0 or abort __LINE__,"Inheritance reset for $exportfile$dupe_extn in $DUPDIR failed."; } } } # Is this needed, file should eb left in the temp location and cleaned up in a couple of days. #! -f "$filename.gz" # or unlink "$filename.gz" # or abort __LINE__,"could not unlink '$filename.gz'.";