John Fitzgerald wrote:
>
> Hi,
Hello,
> I'm fairly new to Perl, and trying to do a simple
> operation on a text file exported from excel.
> ID Enrolled Extraneous Columns....
> 3008 05-Aug-03
> 3008 05-Aug-03
> 3008 05-Aug-03
> 3008 05-Aug-03
> 3008 24-Sep-03
> 3009 11-Aug-03
> 3010 19-Nov-03
> 3010 11-Jul-03
> 3010 11-Jul-03
> 3010 11-Jul-03
> 3011 15-Jul-03
> As you can see, the dates for a given ID are
> different. What I need to do, is set the dates all to
> the earliest date for that ID (client-birth date). The
> other columns are are important, but don't factor in
> here. I'd appreciate any help. Thanks -John
In order to compare the dates you need to rearrange the fields to a more
comparable format like YYYYMMDD.
my %mons = qw(
Jan 01 Feb 02 Mar 03 Apr 04 May 05 Jun 06
Jul 07 Aug 08 Sep 09 Oct 10 Nov 11 Dec 12
);
my $mons = join '|', keys %mons;
# convert dd-Mmm-yy to yyyymmdd
sub conv_date {
my ( $day, $mon, $yr ) = @_;
# convert '51' to '1951' and '50' to '2050'
# adjust to taste
$yr = ( $yr > 50 ? 19 : 20 ) . $yr;
return "$yr$mons{$mon}$day";
}
my ( %record, $id );
while ( <DATA> ) {
( $id, my ( $old_date, @date ) ) =
/^(\d+)\s+((\d+)-($mons)-(\d+))/
or do { print; next };
if ( not exists $record{ $id } or eof DATA ) {
for my $key ( keys %record ) {
for my $line ( @{ $record{ $key }{ lines } } ) {
$line =~ s/\d+-(?:$mons)-\d+/$record{$key}{date}/;
print $line;
}
}
%record = (
$id => {
date => $old_date,
comp => conv_date( @date ),
lines => [ $_ ],
}
);
}
else {
my $comp = conv_date @date;
if ( $comp lt $record{ $id }{ comp } ) {
$record{ $id }{ comp } = $comp;
$record{ $id }{ date } = $old_date;
}
push @{ $record{ $id }{ lines } }, $_;
}
}
__DATA__
ID Enrolled Extraneous Columns....
3008 05-Aug-03 Extraneous Columns....
3008 05-Aug-03 Extraneous Columns....
3008 05-Aug-03 Extraneous Columns....
3008 05-Aug-03 Extraneous Columns....
3008 24-Sep-03 Extraneous Columns....
3009 11-Aug-03 Extraneous Columns....
3010 19-Nov-03 Extraneous Columns....
3010 11-Jul-03 Extraneous Columns....
3010 11-Jul-03 Extraneous Columns....
3010 11-Jul-03 Extraneous Columns....
3011 15-Jul-03 Extraneous Columns....
John
--
use Perl;
program
fulfillment
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>