Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re: Manipulating Data by a Field Identifier

by McDarren (Abbot)
on May 04, 2009 at 01:51 UTC ( #761644=note: print w/ replies, xml ) Need Help??


in reply to Manipulating Data by a Field Identifier

Suggestion: Post the code that is not working for you, so people can see it, comment, and point you in the right direction.

Cheers,
Darren :)


Comment on Re: Manipulating Data by a Field Identifier
Re^2: Manipulating Data by a Field Identifier
by rycher (Acolyte) on May 04, 2009 at 01:57 UTC
    Thanks Darren.

    The code works... it's just that I do not how to get the fax flag line identified and inserted as a faxNumber field.

    Anyway, here it is:

    #!/usr/bin/perl use strict; use warnings; use Text::CSV; my $file = 'Employee.csv'; my $csv = Text::CSV->new(); open (CSV, "<", $file) or die $!; while (<CSV>) { next if ($. == 1); if ($csv->parse($_)) { my @columns = $csv->fields(); my @choppedcols = $csv->fields(); my $username = lc($columns[1]); my $first_name = ($columns[2]); my $last_name = ($columns[3]); my $department = ($columns[4]); my $LocationBuilding = ($columns[5]); my $phoneid = ($columns[6]); my $faxflag = ($columns[7]); my $exchange = ($columns[8]); my $telephone = ($columns[8]).-($columns[6]); my $title = ($columns[9]); my $manager = lc($columns[10]); print "dn: uid=$username\ngivenName: $first_name\nsn: $last_na +me\ndepartment: $department\nbuildingName: $LocationBuilding\ntelepho +nenumber: $ telephone\ntitle: $title\nmanager: uid=$manager\n\n"; } else { my $err = $csv->error_input; print "Failed to parse line: $err"; } } close CSV;
      Okay, I see your problem. You have potentially two records for each user - one containing a telephone number, and the other a fax number, yes?

      This means that you really can't print each line as you iterate, because you need to gather both numbers. One approach to this problem may be to use a hash. Something like the following may work:

      my %users; while (<CSV>) { next if ($. == 1); if ($csv->parse($_)) { my @columns = $csv->fields(); my @choppedcols = $csv->fields(); my $username = lc($columns[1]); $users{$username}{first_name} = ($columns[2]); $users{$username{last_name} = ($columns[3]); # etc... then my $telephone = ($columns[8]).-($columns[6]); if ($columns[8] == 1) { $users{$username}{fax_number} = $telephone; } else { $users{$username}{phone_number} = $telephone; } } }
      And then...
      for my $user (keys %users) { print "dn: uid=$user\n", "givenName: $users{$user}{first_name}\n", "sn: $user{$user}{last_name}\n", #etc... "telephonNumber: $users{$user}{phone_number}\n", "faxNumber: $users{$user}{fax_number}\n"; }

      Cheers,
      Darren :)

        Thank you sir... that worked quite well!

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://761644]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (9)
As of 2014-10-31 09:06 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (215 votes), past polls