Jess Balint wrote:
> 
> Hello all. I am trying to 'code' an address into a certain format. The
> format is as follows:
> 
> first 4 digits of street #
> first 4 street name
> first 2 of address line 2
> first 3 of zip code
> 
> The data is a pipe delimited file with the following format:
> 
> consumer_id|address_line_1|address_line_2|zip_code|
> 
> ex:
> 
> 123456789|123 s main st|apt 23|54321|
> 
> I am trying to match the needed information with a regex, but can't quite
> seem to perfect it. I am running into troubles where there might not be
> anything in the address_line_2 field. I want to match the first characters
> up to a space. Here is what I have so far:
> 
> /^\d+\|(.+)\s(.{4}).*\|.{2}\|(.*)\|/
         ^$1^  ^ $2 ^          ^$3^
You should only use the numerical scalars if the regular expression
matched.  You only have three back references but you are using four.

> $code = $1 . $2 . $3 . " " . $4;
                         ^^^
You change this in the next line to '$'.

> $code =~ s/\s/\$/g;



Here is one way to do it:

@cut = qw/4 4 2 3/;
$line = '123456789|123 s main st|apt 23|54321|';

@data = split /\|/, $line;
( $data[0], $data[1] ) = split /\s+/, $data[1], 2;

for $index ( 0 .. $#cut ) {
    $code .= substr $data[$index], 0, $cut[$index];
    $code .= '$' if $index == 2;
    }

$code =~ tr/ \t\r\n\f/$/;



John
-- 
use Perl;
program
fulfillment

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

Reply via email to