Shawn Milochik wrote:
> 
> I am working on a project which involves downloading files via FTP from an
> AS/400, and I had to write a couple of functions because of the weird way
> IBM does things.
> 
> The first function takes a value, and dependent upon the final character,
> does something to it.
> 
> Rules:
> 1.  If it is a letter, the letter represents a specific decimal amount, and
> the number is negative.
> example: 4L = -3.7, or 6R = -6.3  <-- Note: these are not the actual
> numbers corresponding to the letters, I have the sub figure that out.
> 
> 2. The close curly-brace '}' denotes that the value is negative.
> example: 4} = -4
> 
> 3.  All numeric means that the final character is the decimal amount.
> example 43 = 4.3
> 
> The second function checks to see if the final character is numeric.  If it
> is not, the final character is a stand-in for a digit, and the entire
> statement is negative.  Otherwise, the number stays as is.
> examples:  345M = -3452, 5634 = 5634
> 
> Hope this is useful to someone.  If not, maybe someone already has a
> resource for converting "mainframe" data types.  If they do, I'd like to
> know about it.
> 
> sub parseFrom400 {
>     my $value = @_[0];
                  ^^^^^
You want a scalar here, not an array slice.

     my $value = $_[0];


>     my $delimiter = substr($value, 3, 1);
>     if ($delimiter =~ /[0-9]./){
                              ^
Do you want to match any character except newline here or a literal
dot?  Since $delimiter only contains one character trying to match two
characters will never work.

      if ( $delimiter =~ /\d/ ) {


>         $value = substr($value, 0, 3);
>     }
>     if ($delimiter =~ /[J-R]/){
>         my $tempChar = ord($delimiter) - 73;
>         $value += ($tempChar/10);
>         $value = 0 - $value;
                   ^^^
No need for the zero here.

          $value = -$value;


>     }else{
>         if ($delimiter eq "}"){
>             $value = 0 - $value;

              $value = -$value;

>         }else{
>             $value = $value/10;

Can be shortened to:

              $value /= 10;

>         }
>     }
> 
>     return $value;
> }
> 
> sub parseFrom400_2 {
>     my $value = @_[0];

      my $value = $_[0];

>     my $delimiter = substr($value, 7, 1);
> 
>     if ($delimiter =~ /[J-R]/){
>         my $tempChar = ord($delimiter) - 73;
>         $value *= 10;
>         $value += $tempChar;
>         $value = 0 - $value;

          $value = -$value;

>     }
> 
>     return $value;
> }






John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to