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/