Ken Hill wrote:
> I have the following perl script that reads a fixed-width file and
> replaces values in various sections of the file.
> 
> -------------------------------------------
> open (IN, '< in.txt');
> open (OUT, '> out_test.txt');

You should verify that the files were opened successfully before trying to use
possibly invalid filehandles.

open IN,  '<', 'in.txt'       or die "Cannot open 'in.txt' $!";
open OUT, '>', 'out_test.txt' or die "Cannot open 'out_test.txt' $!";


> while (<IN>) {
> 
>           chomp;
> 
>           $first_section = substr $_, 0, 381;     # extract the first
> section of the record
>           $facilityno = substr $_, 381, 10;    # extract the facilityno
> field
>           $second_section = substr $_, 391, 1056;        # extract the
> second section of the record
>           $requestor_section=" " x 500;
>   # $requestor_section = substr $_, 1446, 499; # extract requestor
> section of record
>           $third_section = substr $_, 1946, 4748; # extract third
> section of record
>           
>           # print out the file with changed facilityno value ...
> 
>           print OUT "$first_section$\0039007300$\$second_section$\
> $requestor_section$\$third_section\n";
>           
> }
> 
> close (IN);
> close (OUT);
> ------------------------------------------------
> 
> I want to place an "if...then" condition on the $facilityno value; such
> that if the $facilityno value = 0000000000, then print out 999999999,
> else print out the value of $facilityno.

while ( <IN> ) {
    if ( '0000000000' eq substr $_, 381, 10 ) {
        substr $_, 381, 10, '999999999';
        }
    print OUT;
    }


Or, you could do it using a reference to the substring:

while ( <IN> ) {
    my $field = \substr $_, 381, 10;
    $$field = '999999999' if $$field eq '0000000000';
    print OUT;
    }




John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to