in reply to Re: Manipulating Data by a Field Identifier
in thread Manipulating Data by a Field Identifier

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;

Replies are listed 'Best First'.
Re^3: Manipulating Data by a Field Identifier
by McDarren (Abbot) on May 04, 2009 at 02:20 UTC
    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!
      A reply falls below the community's threshold of quality. You may see it by logging in.