On Oct 21, 10:57 pm, [EMAIL PROTECTED] (John W. Krahn) wrote:
> [EMAIL PROTECTED] wrote:
> > Hi all,
>
> Hello,
>
> > Serious noob here (one week into llama 5th ed.).
>
> > I'm trying to write a script to pull a specific file from a directory
> > and search that file for specific phrases. I am having a problem
> > searching for the file in the directory. If I type in the actual file
> > name (line 26) I can find the phrase file.zip (line 30). Obviously,
> > this will only work once. If I use a variable to search for a file I
> > get nothing. What is the proper format for line 26?    I can't use
> > File::Find so please don't suggest it.  Thx.
>
> Why can't you use File::Find?  And why would you want to use it for this
> application?
>
> >  #!/usr/bin/perl
>
>      use warnings;
>
> >   2 use strict;
> >   3
> >   4 my $Log_Dir;
> >   5 my $file;
> >   6 my $Date;
> >   7 my $File_Name;
> >   8 my @array;
> >   9 my $file_name;
>
> Why are you declaring all your variables here?
>
> >  11 $Log_Dir = "/var/log/apache/";
> >  12 opendir DH, $Log_Dir or die "Cannot open $Log_Dir: $!";
> >  13 while ($file = readdir DH){
> >  14         push(@array, $file);
> >  15         }
>
> Why the while loop?
>
>     my @array = readdir DH;
>
> Why is the array named "array"?
>
> >  17 closedir DH;
> >  18
> >  19 $Date = `date --date=yesterday +%Y%m%d0000-2400-0`;
>
> Assuming today's date is 21 Oct. 2008, $Date will now contain the string
> "200810200000-2400-0\n"
>
> perldoc -q "How do I find yesterday.s date"
>
> >  20 # The file name always starts with file111-11-23.abctyu_X but the
> > time stamp changes daily (predictable)
> >  21 # Example Filename: file111-11-23.abctyu_X.200810200000-2400-0
>
> It looks like your file name does not have a "\n" at the end?
>
> >  22 $File_Name = "file111-11-23.abctyu_X.$Date";
> >  23 print $Date;
> >  24 foreach $file_name (@array){
> >  25         chomp;
>
> Why are you chomp()ing $_?
>
> >  26         if ($file_name =~ /$File_Name/){
>
> Why use a regular expression?
>
>                if ( $file_name eq $File_Name ) {
>
> >  27                 open LOGFILE, $File_Name;
>
> You should *always* verify that the file opened correctly.
>
> >  28                 while (<LOGFILE>){
> >  29                         #Search log file for the word file.zip
> >  30                         if(/file.zip/){
>
> The . character in a regular expression matches every character (except
> newline) so you have to escape it to match a literal . character:
>
>                                if ( /file\.zip/ ) {
>
> >  31                         print "$_\n";
> >  32                         }
> >  33                 }
> >  34         }
> >  35 }
>
> You are reading all the file names from a directory to find a file that
> you already know the name of.  You probably want some like this instead:
>
> #!/usr/bin/perl
> use warnings;
> use strict;
>
> my $log_dir = '/var/log/apache';
> chomp( my $yesterday = `date --date=yesterday +%Y%m%d` );
> my $file_name = "$log_dir/file111-11-23.abctyu_X.${yesterday}0000-2400-0";
>
> open my $LOGFILE, '<', $file_name or die "Cannot open '$file_name' $!";
>
> while ( <$LOGFILE> ) {
>      #Search log file for the word file.zip
>      print if /file\.zip/;
>      }
>
> __END__
>
> 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

Hi John,

I picked up the Perl book last week so all of your whys will get one
answer. "Because that the way I thought it would work!"

perldoc -q "How do I find yesterday.s date" : This is cool I didn't
realize I could do this (FAQ keyword). Of course I haven't got into
man perldoc to much either.

CHOMP: I still trying to figure out CHOMP. The way I understand it it
is used remove new lines \n.

File Open Verification: I get that. By using something like or die
"Cannot open $blahblah: $!";

Yep. I missed the escape character in the regex.... /file\.zip/

Yes. I will know what the files names are in advance.. I guess I was
caught up learning (I wanted to open a directory and read the
contents) and didn't think simplicity.

I will try your code out. It looks so much easier...

P.S. Thanks Chris for your initial comments. It's all helpful to me at
this point.

M


--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to