use warnings; use strict; use diagnostics; my $file_to_process = $ARGV[0]; my $file_to_create = $ARGV[1]; my $curr_acctn = 0; my $first_time = "yes"; my @account_list = (); my $alpha_chrg_credit = ''; my %bundle; open FH1, ">$file_to_create" or die "Cannot create $file_to_create"; open FH, $file_to_process or die "Cannot open $file_to_process"; while () { chomp; &rtrim($_); my @fields = split; my $acctn = substr($fields[0],3,10); if($acctn != $curr_acctn) { if($first_time eq "yes") { $first_time = "no"; } else { #print FH1 "**************************\n"; #print FH1 "Charges for account number ----> $curr_acctn:\n"; foreach my $account (@account_list) { my $charge_code = substr($account,20,7); my $chrg_credit = substr($account,0,2); my $date = substr($account,14,6); if ($chrg_credit == 42) { $alpha_chrg_credit = "CH"; substr($account,0,2) = "CH "; substr($account,32,3) = " LAB"; } else { $alpha_chrg_credit = "CR"; substr($account,0,2) = "CR "; substr($account,32,3) = " LAB"; } #print FH1 "The charge or credit is: $chrg_credit\n"; #print FH1 "The charge code is: $charge_code\n"; if ($account !~ /.{21}40[68]/) { if ($charge_code != 4039252 && $charge_code != 4039139 && $charge_code != 4039140) { print FH1 "$account\n"; } } if ($charge_code == 4039252) { $account = ""; $account = "$alpha_chrg_credit 0$curr_acctn ${date}4033158 001 LAB\n$alpha_chrg_credit 0$curr_acctn ${date}4033240 001 LAB\n$alpha_chrg_credit 0$curr_acctn ${date}4039241 001 LAB"; print FH1 "$account\n"; } if ($charge_code == 4367958) { $account = ""; $account = "$alpha_chrg_credit 0$curr_acctn ${date}4367958 001 LAB\n$alpha_chrg_credit 0$curr_acctn ${date}4367959 001 LAB"; print FH1 "$account\n"; } #if ($charge_code == 4039139) { # $bundle{$charge_code} += 1; # foreach my $key (sort keys %bundle) { # print "$account contained...$key => $bundle{$key}\n"; #} #} if ($charge_code == 4039140) { $bundle{$charge_code} += 1; foreach my $key (sort keys %bundle) { print "$account contained...$key => $bundle{$key}\n"; } } } @account_list = (); undef %bundle; } } $curr_acctn = $acctn; push (@account_list, $_); } close FH; close FH1; sub rtrim() { $_ =~ s/\s+$//; } #### if ($charge_code == 4039140) { $bundle{$charge_code} += 1; foreach my $key (sort keys %bundle) { print "$account contained...$key => $bundle{$key}\n"; } } #### 4201034600031 1212104034111 001 4201034600031 1212104033180 001 4201034600031 1212104039140 001 4201034600031 1212104039139 001 4201034600031 1212104039463 001 4201034600031 1212104039295 001 4201034600031 1212104039140 001 4201034600031 1212104039139 001 4201034600031 1212104045022 001 4201034600031 1212104045019 001 4201034600031 1212104045022 001 #### CH 01034600031 1212104034111 001 LAB CH 01034600031 1212104033180 001 LAB CH 01034600031 1212104039142 001 LAB CH 01034600031 1212104039463 001 LAB CH 01034600031 1212104039295 001 LAB CH 01034600031 1212104039142 001 LAB CH 01034600031 1212104045022 001 LAB CH 01034600031 1212104045019 001 LAB CH 01034600031 1212104045022 001 LAB