MEPMD01~20080519~03132016040900AM~~~~1782115850871~OK~E~-KWH~~000005~49~03132016120500AM~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~~~~~~~~~~~~~~~~~~~~~~~~~10~0.0~10~0.0~10~0.0~10~0.0~10~0.0~10~0.0~10~0.0~10~0.0~10~0.0~10~0.0~10~0.0~10~0.0~10~0.0~ #### #!/usr/bin/perl use strict; # Force good coding practices use warnings; # Providing warning during execution use Switch; # Necessary for Perl Case statement # Define variables that will be modified within the foreach loop below and then # accessed outside that loop. my $posn; my $cut; my $fieldtwelve; my $discard; my @field; # Set input and output files to variables. Script must have user defined input # file. If second argument does not exist, default to 'results.txt' file. my $infile = $ARGV[0]; my $outfile = $ARGV[1] || 'resultfile.txt'; # If no arguments, display usage format to user. unless (@ARGV) { die "Usage: IncrementalDSTCorrection.pl [] \n"; } # Open input file. Show user error if file not found. open IN, '<', $infile or die "$infile not found in current location"; # Open output file. Should not error but if it does... open OUT, '>', $outfile or die "Cannot open $outfile"; # Place file header from source file into $header variable and place # into output file via OUT file handle my $header = ; print OUT $header; # Use arrays nested in a hash to store field values used later in # the @field array. # The first value will be the corrected interval count. # The second value will be the first field to begin removing NULL values. # Notice that this value changed depending on the interval time and time # of receipt. # The third field indicates how many NULL values will be removed from that # record to correct the interval values. my %incrementalchange = ( '0000051205' => [36,62,24], '0000051210' => [36,60,24], '0000051215' => [36,58,24], '0000051220' => [36,56,24], '0000051225' => [36,54,24], '0000051230' => [36,52,24], '0000051235' => [36,50,24], '0000051240' => [36,48,24], '0000051245' => [36,46,24], '0000051250' => [36,44,24], '0000051255' => [36,42,24], '0000050100' => [36,40,24], '0000050105' => [36,38,24], '0000050110' => [36,36,24], '0000050115' => [36,34,24], '0000050120' => [36,32,24], '0000050125' => [36,30,24], '0000050130' => [36,28,24], '0000050135' => [36,26,24], '0000050140' => [36,24,24], '0000050145' => [36,22,24], '0000050150' => [36,20,24], '0000050155' => [36,18,24], '0000050200' => [36,16,24], '0000151215' => [12,30,8], '0000151230' => [12,28,8], '0000151245' => [12,26,8], '0000150100' => [12,24,8], '0000150115' => [12,22,8], '0000150130' => [12,20,8], '0000150145' => [12,18,8], '0000150200' => [12,16,8], '0000301230' => [6,22,4], '0000300100' => [6,20,4], '0000300130' => [6,18,4], '0000300200' => [6,16,4], '0000600100' => [3,18,2], '0000600200' => [3,16,2] ); my $count = 0; my $incount = 0; my $outcount = 0; my $totalcount = 0; # The foreach loop below will do the following: # 1. read in one record at a time in the foreach # 2. chomp any whitespace from that line # 3. Split the line into an array delimited by tildes # 4. Acquire the timestamp from each record # 5. Determine whether that timestamp was in AM or PM # 6. Combine the interval value and timestamp to be used later # 7. Begin processing each line to remove the NULL values where they exist foreach my $line () { $count = $count + 1; chomp($line); my @field = split "~", $line; my $arraysize = scalar @field; my $intervalcount = $field[12]; my $dstdate = substr($field[13], 0, 3); if ( $arraysize > 15 and $dstdate eq '0313') { my $ampm = substr($field[13], 14, 2); # Ensure the current record is in the AM if ( $ampm eq 'AM' ) { if ($field[5] eq 'EPHONE CABINET') { print "EPHONE CABINET\n"; } if ($field[5] eq 'EPENDENT LIVING') { print "EPHONE CABINET\n"; } my $timestamp = substr($field[13], 8, 4); my $intervaltime = $field[11].$timestamp; # Evaluate field 11 in the @field array to determine the interval # Open a Perl switch statement to handle any possible intervals switch ($field[11]) { case ('000005') { # Use the $timestamp variable to determine the arrival time of the record and take appropriate # actions below. switch ($timestamp){ case ('1205'){ if ( $arraysize > 58 and $field[62] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 12; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; my $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values my $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. my $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. # print OUT join ('~', @field) . "\n"; print OUT join '~',@field; print OUT "\n"; $incount = $incount + 1; } # End if else { print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('1210'){ if ( $arraysize > 56 and $field[60] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 12; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('1215'){ if ( $arraysize > 54 and $field[58] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 12; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('1220'){ if ( $arraysize > 52 and $field[56] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 12; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('1225'){ if ( $arraysize > 50 and $field[54] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 12; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('1230'){ if ( $arraysize > 48 and $field[52] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 12; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('1235'){ if ( $arraysize > 46 and $field[50] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 12; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('1240'){ if ( $arraysize > 44 and $field[48] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 12; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('1245'){ if ( $arraysize > 42 and $field[46] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 12; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('1250'){ if ( $arraysize > 40 and $field[44] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 12; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('1255'){ if ( $arraysize > 38 and $field[42] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 12; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('0100'){ if ( $arraysize > 36 and $field[40] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 12; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('0105'){ if ( $arraysize > 34 and $field[38] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 12; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('0110'){ if ( $arraysize > 32 and $field[36] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 12; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('0115'){ if ( $arraysize > 30 and $field[34] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 12; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('0120'){ if ( $arraysize > 28 and $field[32] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 12; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('0125'){ if ( $arraysize > 26 and $field[30] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 12; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('0130'){ if ( $arraysize > 24 and $field[28] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 12; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('0135'){ if ( $arraysize > 22 and $field[26] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 12; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('0140'){ if ( $arraysize > 20 and $field[24] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 12; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('0145'){ if ( $arraysize > 18 and $field[22] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 12; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('0150'){ if ( $arraysize > 16 and $field[20] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 12; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('0155'){ if ( $arraysize > 14 and $field[18] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 12; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('0200'){ if ( $arraysize > 13 and $field[16] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 12; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case # If none of the times above are not met, the record is not between 12AM and 2AM # Insert the outstanding record into the output file else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End inner switch } # End Case case ('000015') { switch ($timestamp){ case ('1215'){ if ( $arraysize > 28 and $field[30] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. # print "$arraysize\n"; $fieldtwelve = $field[12] - 4; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('1230'){ if ( $arraysize > 26 and $field[28] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 4; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('1245'){ if ( $arraysize > 24 and $field[26] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 4; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('0100'){ if ( $arraysize > 22 and $field[24] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 4; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('0115'){ if ( $arraysize > 20 and $field[22] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 4; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('0130'){ if ( $arraysize > 18 and $field[20] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 4; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; # print OUT join ('~', @field) . "~\n"; print OUT join ('~', @field) . "\n"; $incount = $incount + 1; } } # End Case case ('0145'){ if ( $arraysize > 16 and $field[18] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 4; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case case ('0200'){ if ( $arraysize > 14 and $field[16] eq '' ) { # Ensure NULL values exist where expected. If not do nothing. $fieldtwelve = $field[12] - 4; # Place the value of $fieldtwelve into the $field[12] element of the array $field[12] = $fieldtwelve; $posn = $incrementalchange{$intervaltime}[1]; # Identify first position to begin removing NULL values $cut = $incrementalchange{$intervaltime}[2]; # Identify number of NULL values to remove # Combine (splice) the values above back into the proper element of the @field array. # Provide a warning to the user if something other than a NULL value is removed. $discard = join '',splice(@field,$posn,$cut); warn "Warn : $discard discarded" if ($discard); # Place the current element from the @field array into the output file. # Add a tilde at the end of that record to ensure proper formatting. print OUT join ('~', @field) . "\n"; # print OUT join '~',@field; $incount = $incount + 1; } # End if else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End Case # If none of the times above are not met, the record is not between 12AM and 2AM # Insert the outstanding record into the output file else { # print OUT join ('~', @field) . "~\n"; print OUT join '~',@field; $incount = $incount + 1; } } # End inner switch } # End Case } # End outer switch } # End Top if # This else statement will insert into the output file all records that are in the PM else { # print OUT join ('~', @field) . "~\n"; print OUT join ('~', @field) . "\n"; $outcount = $outcount + 1; } } else { print OUT join ('~', @field) . "~\n"; # print OUT join '~', @field; $incount = $incount + 1; } } # End foreach $totalcount = $incount + $outcount + 1; print "Incount is $incount and Outcount is $outcount\n"; print "Total is $totalcount\n"; # Close input and output files close IN; close OUT; #### MEPMD01~20080519~03132016121100AM~~~~1782115847997~OK~E~-KWH~~000005~46~03122016081500PM~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~ ~.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~00~0.0~ #### MEPMD01~20080519~03132016120400AM~1539065607~42~~1782115849352~OK~E~kVARhtd~~000005~48~03122016080500PM~00~0.0191~00~0.0194~00~0.0195~00~0.0195~00~0.0192~00~0.0194~00~0.0197~00~0.0197~00~0.0192~00~0.0194~00~0.0194~00~0 .0192~00~0.0194~00~0.0195~00~0.0194~00~0.0197~00~0.0197~00~0.0195~00~0.0195~00~0.0195~00~0.0195~00~0.0195~00~0.0201~00~0.02~00~0.02~00~0.02~00~0.0201~00~0.02~00~0.02~00~0.0201~00~0.0203~00~0.02~00~0.0203~00~0.0201~00~0 .0203~00~0.0206~00~0.0207~00~0.0204~00~0.0206~00~0.0207~00~0.0207~00~0.0206~00~0.0209~00~0.0207~00~0.0207~00~0.0207~00~0.0209~00~0.0207~^M~