in reply to pl c sv text format wrap

Hi edrew04

Welcome to the monastery.

At least two things are unclear to me:
- 'Sioting,Michael' is replaced with 'Calinisan,Peter'. Is it a typo?
- Where do 'IT', 'HR', 'PURCHASING' come from?

Replies are listed 'Best First'.
Re^2: creating a ksh wrapper in perl
by edrew04 (Initiate) on Jan 25, 2015 at 16:15 UTC

    yes it is a typo

    here is where i should get the data

    AMS.csv

    1,Go,Manuel,V.,1/22/2015,8:30AM,5:30PM,1001 2,Calinisan,Peter,S.,1/22/2015,8:30AM,5:30PM,1002 3,Sioting,Michael,S.,1/22/2015,8:30AM,5:30PM,1003 1,2002 2,2001 3,2003 1001,IT 1002,HR 1003,PURCHASING

    to become PPS.csv

    2002,Go,Manuel,V.,1/22/2015,8:30AM,5:30PM,IT 2001,Calinisan,Peter,S.,1/22/2015,8:30AM,5:30PM,HR 2003,Sioting,Michael,S.,1/22/2015,8:30AM,5:30PM,PURCHASING

    I had made my initial scripting here but it generally duplicates it

    use strict; use warnings; use Text::CSV; use Data::Dump qw(dump); my @data; # 2D array for CSV data my $file = 'AMS.csv'; my $csv = Text::CSV->new({ binary => 1, quote_null => 0 }); open my $fh, '<', $file or die "Could not open $file: $!"; while( my $column = $csv->getline( $fh ) ) { #shift @$column; push @data, $column; } open $fh, ">:encoding(utf8)", "PPS.csv" or die "PPS.csv: $!"; for (@data) { $csv->print($fh, $_); print $fh "\n"; } close $fh or die "PPS.csv: $!";
      Try
      use strict; use warnings; use Text::CSV; my @data; # 2D array for CSV data my %dict=(); my $file = 'AMS.csv'; my $csv = Text::CSV->new({ binary => 1, quote_null => 0 }); open my $fh, '<', $file or die "Could not open $file: $!"; while( my $ar = $csv->getline( $fh ) ) { if (@$ar > 2){ push @data,$ar; } elsif (@$ar == 2) { $dict{$ar->[0]} = $ar->[1]; } } open $fh, ">:encoding(utf8)", "PPS.csv" or die "PPS.csv: $!"; for my $ar (@data) { $ar->[0] = $dict{$ar->[0]}; $ar->[-1] = $dict{$ar->[-1]}; $csv->print($fh, $ar); print $fh "\n"; } close $fh or die "PPS.csv: $!";
      poj
      Hi edrew04, here is a working version. The newly added lines are marked with '###'.
      use strict; use warnings; use Text::CSV; my @data; # 2D array for CSV data my $file = 'AMS.csv'; my %dept_code = ( ### 1001 => 'IT', ### 1002 => 'HR', ### 1003 => 'PURCHASING', ### ); my $csv = Text::CSV->new({ binary => 1, quote_null => 0 }); open my $fh, '<', $file or die "Could not open $file: $!"; while( my $column = $csv->getline( $fh ) ) { push @data, $column; } open $fh, ">:encoding(utf8)", "PPS.csv" or die "PPS.csv: $!"; for (@data) { $_->[0] += 2000; ### $_->[7] = $dept_code{$_->[7]}; ### $csv->print($fh, $_); print $fh "\n"; } close $fh or die "PPS.csv: $!";

        i tried executing it but it yields the ff. error:

        C:\Users\user\Desktop\perl>perl test4.pl Argument "" isn't numeric in addition (+) at test4.pl line 24, <$fh> l +ine 11. Use of uninitialized value in hash element at test4.pl line 25, <$fh> +line 11. Use of uninitialized value in hash element at test4.pl line 25, <$fh> +line 11. Use of uninitialized value in hash element at test4.pl line 25, <$fh> +line 11. Use of uninitialized value in hash element at test4.pl line 25, <$fh> +line 11. Argument "" isn't numeric in addition (+) at test4.pl line 24, <$fh> l +ine 11. Use of uninitialized value in hash element at test4.pl line 25, <$fh> +line 11. Use of uninitialized value in hash element at test4.pl line 25, <$fh> +line 11. Use of uninitialized value in hash element at test4.pl line 25, <$fh> +line 11. Use of uninitialized value in hash element at test4.pl line 25, <$fh> +line 11.

        i tried executing it but it yields the ff. error:

        C:\Users\user\Desktop\perl>perl test4.pl Argument "" isn't numeric in addition (+) at test4.pl line 24, <$fh> l +ine 11. Use of uninitialized value in hash element at test4.pl line 25, <$fh> +line 11. Use of uninitialized value in hash element at test4.pl line 25, <$fh> +line 11. Use of uninitialized value in hash element at test4.pl line 25, <$fh> +line 11. Use of uninitialized value in hash element at test4.pl line 25, <$fh> +line 11. Argument "" isn't numeric in addition (+) at test4.pl line 24, <$fh> l +ine 11.