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

Replies are listed 'Best First'.
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!
        A reply falls below the community's threshold of quality. You may see it by logging in.