Re: Debug Help Please
- From: Ramroop@xxxxxxxxx (Andy)
- Date: Mon, 7 Jul 2008 05:16:10 -0700 (PDT)
On Jul 5, 9:54 pm, jwkr...@xxxxxxx (John W. Krahn) wrote:
Andy wrote:
Greets
Hello,
Thanks for your earlier help, but I am still stuck.
I took your advice and I believe I put together the script as you
said.
Except that you apparently haven't yet enabled the warnings and strict
pragmas in your program to help you find your mistakes.
I decided to test with one output file in this case only the failed
log.
I get the creation of the csv but no data .
This is a line from the log I parse
Mon Apr 28 23:55:35 2008 0 X.X.X.X 5 /home3/FTP-protected/IBES/
siteseer/download.tst b _ o r USERNAME ftp 0 * c
#Define LogFiles
my $dateroot = $ARGV[ 0 ]; # Value should be 2-digit month
my $outgoing="outgoing_xferlog.$dateroot.csv"; # This is for all
files sent to users
my $incoming="incoming_xferlog.$dateroot.csv"; #This is log for
uploads
my $loginsinlog="loginsinlog_xferlog.$dateroot.csv"; # This is
wherelog users
my $completedlog="completedlog_xferlog.$dateroot.csv"; # All
Completed Sessions
my $failedlog="failedlog_xferlog.$dateroot.csv"; # This is for
all Failures
my %loginsin;
my %completedlog;
my %failures;
my %incoming;
my %outgoing;
#Time Measured
print "Started Processing Logfiles for $dateroot at " .
(localtimetime) ."\n\n";
'localtimetime' is not a valid Perl function, that should be 'localtime
time' or just 'localtime':
print "Started Processing Logfiles for $dateroot at " . localtime . "\n\n";
If you had enabled the warnings and strict pragmas then perl would have
displayed a message to about that. Please put these two lines at the
top of your program to *help* you find these mistakes:
use warnings;
use strict;
#Open Log File Dir to Read .log file(s)
opendir (DIR, ".") or die "$!";
my @logfiles = grep /xferlog\.$dateroot/, readdir DIR;
close DIR;
#Start Log Processing
foreach my $logfile (@logfiles) {
print "Started Processing: $dateroot at " . (localtime time) ."\n";
open(FH,"./$logfile") or die "$!";
while ( my $line = <FH> ) {
chomp($line);
my @fields = split / /, $line; #This is where we look for the .
extensions
#My Ftp Status Log Values
foreach ($line) { #You mentioned why use this here? Is there a
better way?
foreach loops over a list of items but you only have one scalar in that
list. foreach then aliases $_ to each item in that list in turn but you
never use $_ inside the loop. Therefore the foreach loop is superfluous
and should be removed.
print "HELLO";
my $TIME = [3];
That should be:
my $TIME = fields[3];
my $YEAR = $fields[4];
my $IP = $fields[6];
my $SIZE = $fields[7]; #filesize
my $FILE = $fields[8]; #filename and path
my $DIRECTION = $fields[11]; #Outgoing, Incoming
my $USERNAME = $fields[13];
my $STATUS= $fields[17]; #c = completed
i=incomplete
( my $MASKFILE = $FILE ) =~ tr/0-9/#/;
#Failures This is where we check for
failures
if ($STATUS eq "i" ){$failures {$USERNAME} = $TIME.",".$YEAR.",".
$FILE.",".$IP;}
#completed sessions Last Login
if ($STATUS eq "c" ){$completedlog {$USERNAME} = $TIME.",".
$YEAR.",".
$IP;}
#Completed incoming
if ($DIRECTION eq "i" and $STATUS eq "c" ){$incoming {$USERNAME} =
$TIME.",".$YEAR.",".$FILE.",".$SIZE.",".$IP;}
#Outgoing this is where we log all
outgoing xfers
if ($DIRECTION eq "o" and $STATUS eq "c" ){$outgoing {$USERNAME} =
$TIME.",".$YEAR.",".$FILE.",".$SIZE.",".$IP;}
}
}
close(FH);
}
open(OUTPUT, '>', $failedlog) or die("Could not open log file.");
foreach $key ( sort keys %failures ) {"$key,$failures{$key}\n";}
You have a string in void context inside the loop. If you had enabled
the warnings and strict pragmas then perl would have displayed a message
to that effect. Please put these two lines at the top of your program
to *help* you find these mistakes:
use warnings;
use strict;
close(OUTPUT);
John
--
Perl isn't a toolbox, but a small machine shop where you
can special-order certain sorts of tools at low cost and
in short order. -- Larry Wall
Good Morning
Funny how when you talk to different people you get different ways of
looking at it.
One of the Perl guys at my office. told me that I can use
use strict;
use warnings;
but he said , he really doesn't because he wants the script to do what
it needs to do...
I have made corrections as you suggested.
I have included.
use strict;
use warnings;
as well as
my $TIME =$fields[3]
However after that ,
I still get zero output.
Maybe I have this written .....
-Ty
.
- Follow-Ups:
- Re: Debug Help Please
- From: Peter Scott
- Re: Debug Help Please
- From: John W. Krahn
- Re: Debug Help Please
- From: Rob Dixon
- Re: Debug Help Please
- References:
- Debug Help Please
- From: Andy
- Re: Debug Help Please
- From: Andy
- Re: Debug Help Please
- From: John W. Krahn
- Re: Debug Help Please
- From: John W. Krahn
- Debug Help Please
- Prev by Date: RE: Getting file type in perl
- Next by Date: RE: Getting file type in perl
- Previous by thread: Re: Debug Help Please
- Next by thread: Re: Debug Help Please
- Index(es):
Relevant Pages
|