Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks,
This code works great, just need a little help on how to print the lines that match the date variable.
Having a little problem there.
__DATA Kid And Place,006513,pw6513,DI,4/15/2004,10:17:09,15134346,1 Home,006513,pw6513,Login,4/15/2004,10:17:38,, Home,006513,pw6513,DI,4/15/2004,10:17:44,151234326,1 Deal Time,006513,pw001,Login,4/15/2004,10:53:31,1, Car Wash,006513,pw3h,DI,4/15/2004,10:53:46,11238748,1 Magic,006513,pw13,Login,4/15/2004,11:01:25,0,

my $date = "04/11/2004"; my $log_file = "log.txt"; open(LOGDATA, "$log_file") or die("Could not open log file at: $log_fi +le."); my %erg = (); my %app_log = (); my %date = (); while(<LOGDATA>) { my @row = split(/,/,$_); ++$date{$row[4]}; ++$erg{$row[3]}; ++$app_log{$row[0]}; foreach(keys %date){ if($_=~/$m\/$d\/$y/){ @n_row=$_; #print " - $date{$_} - From Date=$m/$d/$y.<br>"; } } } print $_ . ': ' . $date{$_} . '<br />' . "\n" foreach (keys %date); print $_ . ': ' . $app_log{$_} . '<br />' . "\n" foreach (keys %app_lo +g); print $_ . ': ' . $erg{$_} . '<br />' . "\n" foreach (keys %erg);

Thanks for the big help!

Replies are listed 'Best First'.
Re: Printing by date
by Roy Johnson (Monsignor) on Apr 20, 2004 at 18:09 UTC
    print if $row[4] eq $date;?
    Or wrap if ($row[4] eq $date) around your hash assignments, if you only want to include those rows in your final assessment.

    The PerlMonk tr/// Advocate
Re: Printing by date
by Belgarion (Chaplain) on Apr 20, 2004 at 17:58 UTC

    The variables $m, $d, and $y do not appear to be defined in your script, so I'm not sure how the following code is working for you:

    if($_=~/$m\/$d\/$y/) { @n_row=$_; #print " - $date{$_} - From Date=$m/$d/$y.<br>"; }

    Also, you define $date to be a string containing "04/11/2004", but then redefine $date to be a hash. Was the first definition required? Update Well, you can do that but it does make the code more difficult to understand since the same variable name is being used for two different purposes.

    Basically, as I glance at your code, I'm really not sure what it's suppose to do.

      Sorry, don't consider this part
      foreach(keys %date){ if($_=~/$m\/$d\/$y/){ @n_row=$_; #print " - $date{$_} - From Date=$m/$d/$y.<br>"; } }

      It was there as testing I was doing before.

        Fair enough. I removed those lines and then ran your code with the input you provided. I received this as an output:

        __OUTPUT__ 4/15/2004: 6<br /> Kid And Place: 1<br /> Deal Time: 1<br /> Home: 2<br /> Car Wash: 1<br /> Magic: 1<br /> DI: 3<br /> Login: 3<br />

        What output are you expecting? It appears that the date information is printed correctly.