Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re: How to search string in all files in directory

by gasho (Beadle)
on Dec 10, 2008 at 21:06 UTC ( [id://729505]=note: print w/replies, xml ) Need Help??


in reply to How to search string in all files in directory

use File::Find::Rule sub fullPathToFile #($StartDirectory,$SearchExpression) { my ($StartDirectory,$SearchExpression)= @_; my(@files,$IsWin1,$IsWin2,@File_Paths,$Fl,@d,$c); @files = File::Find::Rule->file()->name("$SearchExpression")->in(" +$StartDirectory"); $IsWin1=substr($StartDirectory,1,1); $IsWin2=substr($StartDirectory,0,2); #If $StartDirectory starts with D:\ or \\\\ than it is Win repla +ce / with \ if(($IsWin1 eq ':')||($IsWin2 eq '\\\\')) { foreach $Fl (@files) { @d=split(/\//,$Fl); $c=join ("\\",@d); push(@File_Paths,$c); } } else { @File_Paths=@files; } return @File_Paths; } $LocationOfTheStartDir='C:\chat'; $SearchExp='*.htm'; @AllFilePaths=fullPathToFile($LocationOfTheStartDir,$SearchExp); foreach $InputFile (@AllFilePaths){ @AllLinesFromTheFile = `type $InputFile`; foreach $line (@AllLinesFromTheFile){ if ($line=~/DesiredString/){ print "$line"; } } @AllLinesFromTheFile=(); }
(: Life is short enjoy it :)

Replies are listed 'Best First'.
Re^2: How to search string in all files in directory
by oh5yw (Novice) on Dec 11, 2008 at 06:25 UTC
    No help got only this Software error: syntax error at testi7.cgi line 8, near "use File::Find::Rule sub fullPathToFile #($StartDirectory,$SearchExpression) " Execution of testi7.cgi aborted due to compilation errors.
        well after putting semicolon, got this huge error list:
        Software error: Global symbol "$LocationOfTheStartDir" requires explicit package name +at testi7.cgi line 31. Global symbol "$SearchExp" requires explicit package name at testi7.cg +i line 32. Global symbol "@AllFilePaths" requires explicit package name at testi7 +.cgi line 33. Global symbol "$LocationOfTheStartDir" requires explicit package name +at testi7.cgi line 33. Global symbol "$SearchExp" requires explicit package name at testi7.cg +i line 33. Global symbol "$InputFile" requires explicit package name at testi7.cg +i line 35. Global symbol "@AllFilePaths" requires explicit package name at testi7 +.cgi line 35. Global symbol "@AllLinesFromTheFile" requires explicit package name at + testi7.cgi line 36. Global symbol "$InputFile" requires explicit package name at testi7.cg +i line 36. Global symbol "$line" requires explicit package name at testi7.cgi lin +e 37. Global symbol "@AllLinesFromTheFile" requires explicit package name at + testi7.cgi line 37. Global symbol "$line" requires explicit package name at testi7.cgi lin +e 38. Global symbol "$line" requires explicit package name at testi7.cgi lin +e 39. Global symbol "@AllLinesFromTheFile" requires explicit package name at + testi7.cgi line 43. Execution of testi7.cgi aborted due to compilation errors.
      Most likely you have not installed File::Find::Rule Try this code without calling any modules
      sub fullPathFileName #($StartDirectory,$RegularExpression) { #my ($StartDirectory,$WhildCardSearch)= @_; my ($StartDirectory,$RegularExpression)= @_; my(@A,$e,$C,@B,$a,@C,@Dir,$InputDir,@AllTestSuitefiles,@TestSuitef +iles,$p,@FullPath); #Purpose is to extract all paths to directories and subdirectories @A=`dir $StartDirectory /s/w ` ; foreach $e (@A) { $C=substr($e,0,10); #Extract only string that starts with Directory if($C eq " Directory") { push(@B,$e); } } # Directory of C:\cr1_qc\crnqcV3\CM\Bering\Results\object_test_ +mssql\Root\DirectorySuite\GroupsandRolesSuite\OutputPages # I want to start from C: foreach $a (@B) { push(@C,substr($a,14)); } #Remove lash char that is whitespace @Dir=trim(@C); foreach $InputDir (@Dir) { opendir(ODH,"$InputDir")|| die "Can't open dir\n"; @AllTestSuitefiles=readdir(ODH); # @TestSuitefiles=glob("$WhildCardSearch"); closedir(ODH); # Find all files @TestSuitefiles=grep(m/$RegularExpression/,@AllTestSuitefiles) +; foreach $p (@TestSuitefiles) { push(@FullPath,"$InputDir\\$p"); } } return @FullPath; }#fullPathFileName $LocationOfTheStartDir='C:\chat'; $SearchExp='*.htm'; @AllFilePaths=fullPathToFile($LocationOfTheStartDir,$SearchExp); foreach $InputFile (@AllFilePaths){ @AllLinesFromTheFile = `type $InputFile`; foreach $line (@AllLinesFromTheFile){ if ($line=~/DesiredString/){ print "$line"; } } @AllLinesFromTheFile=(); }
      (: Life is short enjoy it :)
        I forget to add this function at the beginning
        sub trim # (@NonTrimmedArray) { my @out=@_; for (@out) { s/^\s+//; s/\s+$//; } return wantarray ? @out : $out[0]; }
        (: Life is short enjoy it :)
        This one is fully tested
        #!perl sub trim # (@NonTrimmedArray) { my @out=@_; for (@out) { s/^\s+//; s/\s+$//; } return wantarray ? @out : $out[0]; } sub fullPathFileName #($StartDirectory,$RegularExpression) { #my ($StartDirectory,$WhildCardSearch)= @_; my ($StartDirectory,$RegularExpression)= @_; my(@A,$e,$C,@B,$a,@C,@Dir,$InputDir,@AllTestSuitefiles,@TestSuitef +iles,$p,@FullPath); #Purpose is to extract all paths to directories and subdirectories @A=`dir $StartDirectory /s/w ` ; foreach $e (@A) { $C=substr($e,0,10); #Extract only string that starts with Directory if($C eq " Directory") { push(@B,$e); } } # Directory of C:\cr1_qc\crnqcV3\CM\Bering\Results\object_test_ +mssql\Root\DirectorySuite\GroupsandRolesSuite\OutputPages # I want to start from C: foreach $a (@B) { push(@C,substr($a,14)); } #Remove lash char that is whitespace @Dir=trim(@C); foreach $InputDir (@Dir) { opendir(ODH,"$InputDir")|| die "Can't open dir\n"; @AllTestSuitefiles=readdir(ODH); # @TestSuitefiles=glob("$WhildCardSearch"); closedir(ODH); # Find all files @TestSuitefiles=grep(m/$RegularExpression/,@AllTestSuitefiles) +; foreach $p (@TestSuitefiles) { push(@FullPath,"$InputDir\\$p"); } } return @FullPath; }#fullPathFileName $LocationOfTheStartDir='C:\chat'; $RegExp='\.txt$'; @AllFilePaths=fullPathFileName($LocationOfTheStartDir,$RegExp); foreach $InputFile (@AllFilePaths){ @AllLinesFromTheFile = `type $InputFile`; foreach $line (@AllLinesFromTheFile){ if ($line=~/DesiredString/){ print "$line"; } } @AllLinesFromTheFile=(); }
        (: Life is short enjoy it :)
        No joy still... got only this:
        Software error: Global symbol "$LocationOfTheStartDir" requires explicit package name +at testi7.cgi line 63. Global symbol "$SearchExp" requires explicit package name at testi7.cg +i line 64. Global symbol "@AllFilePaths" requires explicit package name at testi7 +.cgi line 65. Global symbol "$LocationOfTheStartDir" requires explicit package name +at testi7.cgi line 65. Global symbol "$SearchExp" requires explicit package name at testi7.cg +i line 65. Global symbol "$InputFile" requires explicit package name at testi7.cg +i line 67. Global symbol "@AllFilePaths" requires explicit package name at testi7 +.cgi line 67. Global symbol "@AllLinesFromTheFile" requires explicit package name at + testi7.cgi line 68. Global symbol "$InputFile" requires explicit package name at testi7.cg +i line 68. Global symbol "$line" requires explicit package name at testi7.cgi lin +e 69. Global symbol "@AllLinesFromTheFile" requires explicit package name at + testi7.cgi line 69. Global symbol "$line" requires explicit package name at testi7.cgi lin +e 70. Global symbol "$line" requires explicit package name at testi7.cgi lin +e 71. Global symbol "@AllLinesFromTheFile" requires explicit package name at + testi7.cgi line 75. Execution of testi7.cgi aborted due to compilation errors.
        Now I remove 2 stupid own lines at the beginning and now I got only this error: Software error: Undefined subroutine &main::fullPathToFile called at testi7.cgi line 63. Kari

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://729505]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others taking refuge in the Monastery: (5)
As of 2024-03-28 08:35 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found