if you observe the emp id 100045671 was repeated 3 times, but i want it only once and only the first occurence
so from the below three
100045671,20150301
100045671,20150301
100045671,20150601
i just wanted the first one
100045671,20150301
in order to achieve that how can i modify the script.
I just don't want any duplicate employee id's in the file, if there are duplicates i want just the first occurence and remove the remaining from the csv.
use strict;use warnings;use Pod::Usage;use Getopt::Long;use Time::Piece;my $helpme = 0;my $man = 0;my $outputFileName = 'C:\\temp\\test_v1.csv';my $inputFileName = 'C:\\temp\\test.txt';my $errorcode = 0;my $DEBUG=0;if(exists $ENV{DEBUG}) { $DEBUG = ($ENV{DEBUG} eq "") ? 0 : $ENV{DEBUG};}GetOptions('help' => \$helpme, 'man' => \$man, 'infile=s' => \$inputFileName, 'outfile=s' => \$outputFileName) or pod2usage(2);pod2usage(1) if $helpme;pod2usage(-verbose => 2) if $man;die 'No input file name specified!' unless $inputFileName;die 'No output file name specified!' unless $outputFileName;open(INFILE, '<', $inputFileName) or die "Could not open input file: $!";open(OUTFILE, '>', $outputFileName) or die "Could not open/create output file: $!";while(<INFILE>) { chomp; if ((/^50\|([^|]+)\|/) || (/^51\|([^|]+)\|/)) { my $empID = $1; print OUTFILE $empID, ","; } if ((/^90\|([^|]+)\|/) || (/^91\|([^|]+)\|/)) { my $eDate = $1; my $dt = Time::Piece->strptime($eDate, '%m/%d/%Y'); print OUTFILE $dt->strftime('%Y%m%d'), "\n"; }}close INFILE;close OUTFILE;
1) Error - Global symbol "%seen" requires explicit package name at line 38
2) if the error is fixed and let say it ran well, then it will remove my emp id's but the dates that i get from other if conditions are not gone... so if your code works then my output will be something like
I fixed that issue, but looks like i did not ask the question properly so I am not getting what i am expecting... so here is the input file that i am using
yes i did that ozo, no effect.
but if you check the script
let's say we are checking line that starts with 50 and lets say empid is seen so "&&next"
will go to next line which is line that starts with 90 (second if condition in script)
as it passes second if condition it gets the date - so now i have no emp id but have date
I think your way will work but it's certainly not as clean or efficient as ozo/my solution (I always hate when someone else responds with the same answer while I'm typing it out).
shragi
ASKER
Thanks OZO and wilcoxon - both solution are same and it worked along with mine. I will use your solution as it is much cleaner than mine.