#!/usr/bin/perl -w
use Fcntl;
use Getopt::Std;
use constant DIR => "/d/testing";
use constant MAX => 11;
my $prog = $0;
$prog =~ s|.*/||;
my %opts;
getopts('o:', \%opts);
my $cmd = $opts{o} || 1;
my @date = localtime(time);
my $dd = sprintf ("%02d", $date[3]);
my $mm = sprintf ("%02d", $date[4] + 1);
my $yy = sprintf ("20%02d", $date[5] % 100);
my $yymmdd = "$yy$mm$dd";
my @a;
my $bnum;
my $template = "A12 A4 A20 A20
A2 A2 A2 A2
A12 A4 A24 A24";
unshift (@ARGV, "-") unless @ARGV;
for my $mfile (@ARGV) {
$file = $mfile;
open (IN, "< $file") or die ("Can't open $file: $!\n");
while (<IN>)
{
@normalDb = ();
@errorDb = ();
s/\s//g;
$dd = $_;
my @a = unpack($template, $dd);
$sdate = $a[8];
$state = $a[4];
$err = $a[7];
$bnum = substr($a[3], skip_zero($a[3]));
substr($dd, 37, 0) = '00' if ( $state eq '02' );
substr($dd, 62, 3) = '01' if ( $sdate !~ /^0/ && $err !~ /^0/
+ );
substr($dd, 62, 3) = '01' if (length($dd) == 131);
#The 2 last character of lines must be number
if ($dd !~ /\d\d$/ || $dd =~ /<u$/ ) {
$dd =~ s/..$/00/g;
}
#insert X for the rest
if ( length($dd) < 130 ) {
$dd = insert0($dd);
} else {
$dd = substr($dd, 0, 130);
}
if ( length($dd) == 130 ) {
push (@normalDb, $dd);
} else {
push (@errorDb, $dd);
}
if ( @normalDb > 0 ) {
my $path = "$file\.ok";
open (NORMAL, "+>> $path") or die $!;
for (@normalDb) { print (NORMAL "$_\n") };
close (NORMAL);
}
if (@errorDb > 0 ) {
my $path = "$file\.error";
open(ERROR, "+>> $path") or die $!;
for (@errorDb) { print (ERROR "$_\n") };
close (ERROR);
}
}
close (IN);
}
sub skip_zero
{
my ($a) = @_;
my $j = 0;
foreach my $i (split //, $a)
{
$j++;
return $j if ($i > 0);
}
}
sub insert0
{
my ($tmp) = @_;
my @data;
push(@data, $tmp);
for (my $i = length($tmp); $i < 130; $i++) {
push(@data, "X");
}
return sprintf ("%s", join('', @data));
}
die;
As your info, the the file size is about 507156496 bytes.... |