recursion - Perl opening files from recursive directory -
so program supposed recursively go through directory , each file in directory, open file , search words "error" "fail" , "failed." should write instances these words occur, rest of characters on line after words, out file designated in command prompt. have been having trouble making sure program performs search on files found in directory. right recurse through directory , creates file write out to, however, not seem searching through files found in recursing. here code:
#!/usr/local/bin/perl use warnings; use strict; use file::find; $argument2 = $argv[0]; $dir = "c:/program/scripts/directory1"; #directory search through open file, ">>$argument2" or die $!; #file write out $unsuccessful = 0; @errors = (); @failures= (); @failures2 = (); @name = (); @file; $file; $filename; opendir(dir, $dir) or die $!; while($file = readdir(dir)){ next if($file =~ m/^\./); foreach(0..$#file){ print $_; open(filelist, '<', $_); while(<filelist>){ if (/unsuccessful/i){ $unsuccessful = 1; } if(/error/ ){ push(@errors, "error in line $.\n"); print "\t\terror in line $.:$1\n" if (/error\s+(.+)/); } if(/fail/i ){ push(@failures, "error in line $.\n"); print file "error in line $.:$1\n" if (/fail\s+(.+)/); } if(/failed/i ){ push(@failures2, "error in line $.\n"); print file "error in line $.:$1\n" if (/failed\s+(.+)/); } if ($unsuccessful){ } } close filelist; } } closedir(dir); close file;
so, clarify, problem search contained in "while()" loop not seem executing on files found in directory recursively. comments/suggestions/help can give on why may happening helpful. new perl sample code me understand trying say. thank much.
typically, when want on recursive files, start find2perl . -print generates boilerplate me wanted
function can modify whatever want.
for example
# traverse desired filesystems file::find::find({wanted => \&wanted}, '.'); exit; sub wanted { return unless -f $file::find::name; return unless -r $file::find::name; open (f,"<",$file::find::name) or warn("error opening $file::find::name : $!\n"); while(<f>) { if(m/error/) { print; } if(m/fail/) { print; } } }
Comments
Post a Comment