Assuming DATA is your file handle to the list of users:

# store name list in %hash, where key is name or number
# and value is array of actual names
while( <DATA> ) {
  chomp;
  # does name have proper number?
  if( /(00\d+)/ ) {
    $key = $1;
    next if !/^(ct|ma|mb)/;     # skip those that don't begin ct,ma,mb
  }
  else {
    $key = $_;      # for all others use name itself
  }

  # add to hash--we have to check the key to avoid reference errors
  if( exists( $hash{$key} ) ) {     # already added once
    push @{$hash{$key}}, $_;
  }
  else {        # first time
    $hash{$key} = [$_];
  }
}

# now you have the data organized, To view:
foreach ( sort keys %hash ) {
  print "$_ = ", join( ', ', @{$hash{$_}} ), "\n";
}

__END__

on 5/10/02 4:52 AM, [EMAIL PROTECTED] purportedly said:

> I have a file with a list of users.Some of the user names are like this:
> 
> ct002345
> ct000123
> ma005678
> ma009876
> mb000867
> mb002412
> sa000100
> sb000003
> sg000072
> 
> I need to extract just the number(there is 00 before each number and I
> want it too) of "ct , ma , mb"(no "sa , ecc.")and all the other users
> that are in the list:
> example
> 
> abelar           -->     abelar
> aci09            -->      aci09
> ct001234      -->      001234
> ma000234    -->       000234
> sg000072     -->       nothing
> 
> This is the first step.Then I need to make a new file with every normal
> name and  for each number extacted the three possibilities(ct , ma , mb)
> 
> example
> 
> abelar    -->    abelar
> 001234   -->    ct001234
> ma001234
> mb001234
> 
> I'm trying from a week but pattern matching is not so simple for
> me.Please help me.Thanks
> 


Keary Suska
Esoteritech, Inc.
"Leveraging Open Source for a better Internet"

Reply via email to