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 :)
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.
| [reply] |
|
| [reply] [d/l] |
|
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.
| [reply] [d/l] |
|
|
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 :)
| [reply] [d/l] |
|
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 :)
| [reply] [d/l] |
|
#!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 :)
| [reply] [d/l] |
|
|
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.
| [reply] [d/l] |
|
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
| [reply] |
|
|