If I understand you correctly, you are trying to process an array of an
array--each element of an array contains an anonymous array. Is this
correct?

Given the fact that you would like to pull out a specific user, you should
use a hash of a hash (a hash containing anonymous hashes).

Also, since you want to pull out particular info:
--user=1 --item=firstName
but user value of "1" is not contained in the data you posted. I am assuming
you mean the firstName of the first array value.

Lastly, you write that the data are "in a list format in an array" but you
include colons separate each array element which leads me to believe that
the data is really in plain text separated by colons.

I making many assumptions but here goes:

---------------BEGIN CODE---------------
#!D:\perl\bin\perl -w
use strict;

my ($id, $status, $user, $phone, $first, $last, $email) = 0 .. 6;
my @data;
my %data;

while (<DATA>) {
  # You can do a pattern match:
  # I did not parenthesize the field separator : below because
  # I did not want it as an element in @temp.
  # my @temp = $_ =~
  # m{ ^(\d+)                 # id
  #    \( (\w+) \) : \s*      # status
  #    (\w+) \s*   : \s*      # username
  #    (\d+) \s*   : \s*      # phone
  #    (\w+) \s*   : \s*      # first name
  #    (\w+) \s*   : \s*      # last name
  #    (.+)$                  # email address
  # }x;

  # Or you can split $_
  my @temp = split /[\(\):\s]+/;
  # This is @data
  $data[ $#data+1 ] = [ @temp ];
}

# Now you can directly print the email address of the 3rd record:
print "email: $data[2][$email]\n";

# But is that really helpful?
# You might want to build a hash with the username as keys:
foreach ( @data ) {
  # This is %data
  $data{ $$_[$user] } = [ @$_[0..$user-1, $user+1..$#$_ ] ];
}
print "id: $data{idiot}[$id]\n\n";

# You now have a hash with arrays as the values.
# You can NOT safely use the global variables
# $phone, $first, $last, $email
# from above because their values should have shifted down
# by one when I removed username; therefore....
foreach my $key ( keys %data ) {
  my @values = @{$data{$key}};

  # Necessary because you are replacing an array with a hash.
  # If you do not undef, a "can't coerce" error occurs.
  undef $data{$key};

  # This is a hash slice.
  # Refer to Perl Cookbook 4.7 p. 105
  @{ $data{$key} }{ qw(id status phone first last email) } = @values;
}

# Print what's in the hash.
foreach my $id ( sort keys %data ) {
  print "$id\n";
  foreach my $field ( sort keys %{$data{$id}} ) {
    print "\t$field\t$data{$id}{$field}\n";
  }
}

# Or you can print oaf's last name:
print "\nlast: $data{oaf}{last}\n";

__DATA__
2233440000(IDLE): idiot : 1234567 : Iyam : Stupid : [EMAIL PROTECTED]
5566770000(IDLE): moron : 8901234 : Moe  : Ron    : [EMAIL PROTECTED]
8899000000(IDLE): oaf   : 5678901 : Big  : Giant  : [EMAIL PROTECTED]
----------------END CODE----------------

-----Original Message-----
From: David Mamanakis [mailto:efialtis@;efialtis.com]
Sent: Friday, October 18, 2002 4:37 PM
To: [EMAIL PROTECTED]
Subject: another reg-ex question


these are common it seems...

I have a routine that returns a listing of users and all their information
in a list format in an array

1: <userIDnumeric>(status): <userName> : <phoneNumber> : firstName :
lastName : eMail@.com
example:
1: 2233440000(IDLE): idiot : 1234567 : Iyam : Stupid : [EMAIL PROTECTED]

This list can be long.

The problem I am having is I need to know how to grab individual components
out of the listing...
Each list is an element in the array.
I can grab each list doing a "foreach" but I need a reg-ex to grab only the
username or only the phone number...

Earlier reg-ex's I have written I have split lists on commons like the ":"
but can I split this list into 7 parts then re-split # 2 again to have a
total of all 8 list parts?
This is not exactly what I am looking for...I would much rather like to
"plug in" what I am looking for and be able to grab it out..

i.e.  I would like to input which user and which item I want and have it
output only those items...

--user=1 --item=firstName

User1-firstName=Iyam

I just need the reg-ex...I can work out the rest of the programming...


Thanks for any help...


--Dave Mamanakis
--Monroe, WA






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

Reply via email to