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/