Link to home
Start Free TrialLog in
Avatar of tomatocans
tomatocans

asked on

Print issue and Error

Following is how the code stands:

I am receiving an error

Value of <HANDLES> construct can be "0"; test with defined () at line 65535

and have no idea what the error is referrring to.


Also the output puts a | after the last field which distrurbs bcp in sybase.
How would you change the print statement to not put a | only after the last Part.
Otherwise a | should go after a part.

#! /usr/local/bin/perl


open(RAW, "< /data/oag/jan/oag.0199.dat");
unlink "left_over.txt";
open(LEFT, "> /data/oag/jan/left_over.txt");
open(OUT, "> /data/oag/jan/oag.0199.dbload");

while ($Line = <RAW>)
{
                     
      # Add a leading character so that awk's 1-based
      # second substr parameter will work
      $Line =  " " . $Line;
      $SendLineToLeftover = 0;   #FALSE
      chomp $Line;
      $i = 1;
                       
        $Part[$i] = substr($Line,1,4);  $i++;
        $Part[$i] = substr($Line,5,4);  $i++;
        $Part[$i] = substr($Line,10,4); $i++;
        $Part[$i] = substr($Line,14,4); $i++;
        $Part[$i] = substr($Line,18,4); $i++;
        $Part[$i] = substr($Line,22,4); $i++;
        $Part[$i] = substr($Line,27,4); $i++;
        $Part[$i] = substr($Line,31,1); $i++;
        $Part[$i] = substr($Line,32,4); $i++;
        $Part[$i] = substr($Line,36,4); $i++;
        $Part[$i] = substr($Line,40,1); $i++;
        $Part[$i] = substr($Line,41,3); $i++;
        $Part[$i] = substr($Line,44,5); $i++;
        $Part[$i] = substr($Line,54,1); $i++;
        $Part[$i] = substr($Line,55,1); $i++;
        $Part[$i] = substr($Line,56,1); $i++;
        $Part[$i] = substr($Line,57,1); $i++;
        $Part[$i] = substr($Line,58,1); $i++;
        $Part[$i] = substr($Line,59,1); $i++;
        $Part[$i] = substr($Line,60,1); $i++;
        $Part[$i] = substr($Line,61,1); $i++;
        $Part[$i] = substr($Line,62,1); $i++;
        $Part[$i] = substr($Line,63,4); $i++;
        $Part[$i] = substr($Line,67,4); $i++;
        $Part[$i] = substr($Line,71,4); $i++;
        $Part[$i] = substr($Line,75,3); $i++;
        $Part[$i] = substr($Line,78,3); $i++;
        $Part[$i] = substr($Line,81,6); $i++;
        $Part[$i] = substr($Line,87,6); $i++;
        $Part[$i] = substr($Line,93,6); $i++;
        $Part[$i] = substr($Line,99,6); $i++;
        $Part[$i] = substr($Line,105,3); $i++;
        $Part[$i] = substr($Line,109,3); $i++;
        $Part[$i] = substr($Line,113,2); $i++;
        $Part[$i] = substr($Line,115,1); $i++;
        $Part[$i] = substr($Line,116,3); $i++;
        $Part[$i] = substr($Line,119,1); $i++;
        $Part[$i] = " ";               $i++;
        $Part[$i] = substr($Line,124,27); $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
      $Part[$i] = " ";               $i++;
        $LastPartPlus1 = $i;

                 if ($Part[29] =~ /[0-9]{5}[KROM\{]/) {
                         $Part[29] = "+" . substr($Part[29],0,5);
                }
                elsif ($Part[29] =~ /[0-9]{5}[ABCDEFGHIJLNPQ\}]/) {
                         $Part[29] = "-" . substr($Part[29],0,5);
                }

                else {
                         $SendLineToLeftover = 1;   #TRUE
                }

                if ($Part[31] =~ /[0-9]{5}[KROM\{]/) {
                            $Part[31] = "+" . substr($Part[31],0,5);
                }
                elsif ($Part[31] =~ /[0-9]{5}[ABCDEFGHIJLNPQ\}]/) {
                            $Part[31] = "-" . substr($Part[31],0,5);
                }

                else {
                            $SendLineToLeftover = 1;   #TRUE
                }
                if ($SendLineToLeftover) {
                         #
                         # Send the left overs to a file.
                         #
                         print LEFT substr($Line, 1), "\n";   # Remove the space added earlier
                }
                 else {
                         #
                         # Print the other lines (modified) to standard out.
                         #
                         # Create the new line from its parts
                         $NewLine = "";
                         for ($i = 1; $i < $LastPartPlus1; $i++) {
                            $NewLine = $NewLine . $Part[$i] . "|";
                         }
                         print OUT $NewLine." \n";
                      }
                }

close LEFT;
close RAW;
close OUT;



#! /usr/local/bin/perl -w


open(RAW, "< /data/oag/feb/oag.299.dat");
unlink "left_over.txt";
open(LEFT, "> /data/oag/feb/left_over.txt");
open(OUT, "> /data/oag/feb/oag.299.dbload");

while ($Line = <RAW>)
{
                     
      # Add a leading character so that awk's 1-based
      # second substr parameter will work
      $Line =  " " . $Line;
      $SendLineToLeftover = 0;   #FALSE
      chomp $Line;
      $i = 1;
                       
        $Part[$i] = substr($Line,1,4);  $i++;
        $Part[$i] = substr($Line,5,4);  $i++;
        $Part[$i] = substr($Line,10,4); $i++;
        $Part[$i] = substr($Line,14,4); $i++;
        $Part[$i] = substr($Line,18,4); $i++;
        $Part[$i] = substr($Line,22,4); $i++;
        $Part[$i] = substr($Line,27,4); $i++;
        $Part[$i] = substr($Line,31,1); $i++;
        $Part[$i] = substr($Line,32,4); $i++;
        $Part[$i] = substr($Line,36,4); $i++;
        $Part[$i] = substr($Line,40,1); $i++;
        $Part[$i] = substr($Line,41,3); $i++;
        $Part[$i] = substr($Line,44,5); $i++;
        $Part[$i] = substr($Line,54,1); $i++;
        $Part[$i] = substr($Line,55,1); $i++;
        $Part[$i] = substr($Line,56,1); $i++;
        $Part[$i] = substr($Line,57,1); $i++;
        $Part[$i] = substr($Line,58,1); $i++;
        $Part[$i] = substr($Line,59,1); $i++;
        $Part[$i] = substr($Line,60,1); $i++;
        $Part[$i] = substr($Line,61,1); $i++;
        $Part[$i] = substr($Line,62,1); $i++;
        $Part[$i] = substr($Line,63,4); $i++;
        $Part[$i] = substr($Line,67,4); $i++;
        $Part[$i] = substr($Line,71,4); $i++;
        $Part[$i] = substr($Line,75,3); $i++;
        $Part[$i] = substr($Line,78,3); $i++;
        $Part[$i] = substr($Line,81,6); $i++;
        $Part[$i] = substr($Line,87,6); $i++;
        $Part[$i] = substr($Line,93,6); $i++;
        $Part[$i] = substr($Line,99,6); $i++;
        $Part[$i] = substr($Line,105,3); $i++;
        $Part[$i] = substr($Line,109,3); $i++;
        $Part[$i] = substr($Line,113,2); $i++;
        $Part[$i] = substr($Line,115,1); $i++;
        $Part[$i] = substr($Line,116,3); $i++;
        $Part[$i] = substr($Line,119,1); $i++;
        $Part[$i] = substr($Line,120,27); $i++;
        $Part[$i] = substr($Line,147,27); $i++;
      $Part[$i] = substr($Line,174,3); $i++;
      $Part[$i] = substr($Line,177,5); $i++;
      $Part[$i] = substr($Line,182,27); $i++;
      $Part[$i] = substr($Line,209,27); $i++;
      $Part[$i] = substr($Line,236,27); $i++;
      $Part[$i] = substr($Line,263,2); $i++;
      $Part[$i] = substr($Line,265,2); $i++;
      $Part[$i] = substr($Line,267,1); $i++;
      $Part[$i] = substr($Line,268,1); $i++;
      $Part[$i] = substr($Line,269,1); $i++;
      $Part[$i] = substr($Line,270,1); $i++;
      $Part[$i] = substr($Line,271,1); $i++;
      $Part[$i] = substr($Line,272,1); $i++;
      $Part[$i] = substr($Line,273,1); $i++;
      $Part[$i] = substr($Line,274,1); $i++;
      $Part[$i] = substr($Line,275,1); $i++;
      $Part[$i] = substr($Line,276,1); $i++;
      $Part[$i] = substr($Line,277,1); $i++;
      $Part[$i] = substr($Line,278,1); $i++;
      $Part[$i] = substr($Line,279,1); $i++;
      $Part[$i] = substr($Line,280,1); $i++;
      $Part[$i] = substr($Line,281,1); $i++;
      $Part[$i] = substr($Line,282,1); $i++;
      $Part[$i] = substr($Line,283,1); $i++;
      $Part[$i] = substr($Line,284,1); $i++;
      $Part[$i] = substr($Line,285,1); $i++;
      $Part[$i] = substr($Line,286,1); $i++;
      $Part[$i] = substr($Line,287,1); $i++;
      $Part[$i] = substr($Line,288,1); $i++;
      $Part[$i] = substr($Line,289,1); $i++;
      $Part[$i] = substr($Line,290,1); $i++;
      $Part[$i] = substr($Line,291,1); $i++;
      $Part[$i] = substr($Line,292,1); $i++;
      $Part[$i] = substr($Line,293,1); $i++;
      $Part[$i] = substr($Line,294,1); $i++;
      $Part[$i] = substr($Line,295,1); $i++;
      $Part[$i] = substr($Line,296,1); $i++;
      $Part[$i] = substr($Line,297,1); $i++;
      $Part[$i] = substr($Line,298,3); $i++;
        $LastPartPlus1 = $i;

                 if ($Part[29] =~ /[0-9]{5}[KROM\{]/) {
                         $Part[29] = "+" . substr($Part[29],0,5);
                }
                elsif ($Part[29] =~ /[0-9]{5}[ABCDEFGHIJLNPQ\}]/) {
                         $Part[29] = "-" . substr($Part[29],0,5);
                }

                else {
                         $SendLineToLeftover = 1;   #TRUE
                }

                if ($Part[31] =~ /[0-9]{5}[KROM\{]/) {
                            $Part[31] = "+" . substr($Part[31],0,5);
                }
                elsif ($Part[31] =~ /[0-9]{5}[ABCDEFGHIJLNPQ\}]/) {
                            $Part[31] = "-" . substr($Part[31],0,5);
                }

                else {
                            $SendLineToLeftover = 1;   #TRUE
                }
                if ($SendLineToLeftover) {
                         #
                         # Send the left overs to a file.
                         #
                         print LEFT substr($Line, 1), "\n";   # Remove the space added earlier
                }
                 else {
                         #
                         # Print the other lines (modified) to standard out.
                         #
                         # Create the new line from its parts
                         $NewLine = "";
                         for ($i = 1; $i < $LastPartPlus1; $i++) {
                            $NewLine = $NewLine . $Part[$i] . "|";
                         }
                         print OUT $NewLine." \n";
                      }
                }

close LEFT;
close RAW;
close OUT;
Avatar of tomatocans
tomatocans

ASKER

Sorry Code listed 2x
i think the problem is with the raw data file. Check line 65535 of /data/oag/jan/oag.0199.dat. you will find some special character that PERL is not treating as raw data, but trying to interpret as a PERL directive.

the solution would be to escape that character to PERL treats it as raw data.
Avatar of ozo
/usr/local/bin/perl -Mdiagnostics -wc
while ($Line = <RAW>){}
Value of <HANDLE> construct can be "0"; test with defined() at - line 1 (#1)
   
    (W) In a conditional expression, you used <HANDLE>, <*> (glob), each(),
    or readdir() as a boolean value.  Each of these constructs can return a
    value of "0"; that would make the conditional expression false, which is
    probably not what you intended.  When using these constructs in conditional
    expressions, test their values with the defined operator.
   
ASKER CERTIFIED SOLUTION
Avatar of mattrope
mattrope

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
how would u change the code to make the loop work for displaying purposes
Thanks. Right on the money with the define correction.