Skip Menu |
 

This queue is for tickets about the File-Grep CPAN distribution.

Report information
The Basics
Id: 12143
Status: new
Priority: 0/
Queue: File-Grep

People
Owner: Nobody in particular
Requestors: pradeep.kamat [...] gmail.com
Cc:
AdminCc:

Bug Information
Severity: Critical
Broken in: (no value)
Fixed in: (no value)

Attachments


Subject: finding difficulty in fgrep function
Download (untitled) / with headers
text/plain 595b
Hello Sir, I am facing some unusual problem with fgrep function. I have created program file textfind5.pl using some : xyz username.. when i executed it with same account (xyz) it gives me correct result. But when i tried to execute it from anybody else account it gives me error :- #######"Cannot use file '/hm/kiranc/temp.txt' for fgrep: Permission denied at textfind5.pl line 258"############ Kindly help me out in this matter. my program takes logical expression as an input which contains pattern to be searched and returns the filoe name containing that logical expression
Download textfind5.pl
text/x-perl 9.4k
#!/usr/bin/perl ######################################################################################################################################## # Created By Pradeep Kamat on 01-04-2005 (dd-mm-yyyy) # # File can be used to search specific pattern in multiple files. # ######################################################################################################################################## use File::Grep qw(fgrep); #our $SILENT = 0; #&searchPatter(); #&getMatch("use"); my @pr_arr=&inputfields("/usr/local/ipman/data/scaninput.dat"); print "\n After Function is called.......... \n\n"; #print "\n@pr_arr :- @pr_arr\n"; foreach (@pr_arr) { #print "hieeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\n"; #print "\nBefore searchPatter :- @{$_->{File_List}}"; &searchPatter($_->{File_List},$_->{Logic_exp},$_->{Hash_search}); #print "\n @{$_->{File_List}}"; #print "\n $_->{Logic_exp}"; #print "\n %{$_->{Hash_search}}"; } sub searchPatter { my ($file_list,$log_exp,$hs_arr)= @_; #print "All files cotaining file :- @{$file_list} \n"; my @post_arr=&createPostfix($file_list,$log_exp,$hs_arr); my $res = &evalPostfix(@post_arr); open(FL1,">> /hm/aroras/res.log"); my @key = keys(%{$res}); print FL1 "All files cotaining pattern $log_exp \n"; foreach $val(@key) { print FL1 "$val \n"; } close(FL1); } ################################################################# # Created By Pradeep Kamat # Created On :- 31/03/2005 (dd/mm/yyyy) # Description :- function takes expression as an input and return # an array containing postfix form of expression # Input :- logical expression as string # Return :- postfix expression as array ################################################################# sub createPostfix { my @file_arr =@{@_[0]}; my $in =@_[1]; my $ele_hash = @_[2]; #print "\n Inside CREATEPOSTFIX Functin File list :- @file_arr \n\n logical expression :- $in \n\n elements are :- %ele_hash\n\n"; my $err_flag=0; my @post_arr; my @opr_stk; my @args = split / /,$in; my $match_res=0; #check is argument list starting with special character my $match_res = $args[0] =~ /^AND|^OR/; #print "\$match_res :- $match_res \n"; if ($match_res == 1) { print "Your pattern should not contain any of the meta-character at the starting position"; $err_flag=1; return; } $cnt = scalar(@args); $args[$cnt]= ")"; push (@opr_stk, "("); foreach $val (@args) { my $res = $val=~ /AND|OR|\)/; #print "\$res :- $res \n"; if($res != 1) { print "val is :- $val element is :- $ele_hash->{$val} \n"; %temp = &getMatch($ele_hash->{$val},\@file_arr); push(@post_arr,\%temp); } elsif ($val=~ /AND|OR|\(/) { print "\$val :- $val \n"; push(@opr_stk,$val); } elsif ( $val=~ /\)/ ) { while ( ($opt = pop(@opr_stk)) ne '(' ) { #print "\$opt :- $opt \n"; push(@post_arr,$opt); } } } #print "\n post fix form is :- @opr_stk"; print "\n post fix form is :- @post_arr"; return @post_arr; } ################################################################# # Created By Pradeep Kamat # Created On :- 31/03/2005 (dd/mm/yyyy) # Description :- function takes postfix expression as an input and # return reference to hash containing result # Input :- postfix expression as array # Return :- result of expression hash reference ################################################################# sub evalPostfix { my @par = @_; print "\n Inside EVALPOSTFIX Function parameters are :- @par\n"; my (@res_stack,%res,$hash_opr1,$hash_opr2); foreach (@par) { if (/AND|OR/) { print "Eval function::EvalPostfix in inside if value is :- $_ \n "; $hash_opr1 =pop(@res_stack); $hash_opr2 =pop(@res_stack); %res = (/AND/ eq '1') ? &and_fun($hash_opr2,$hash_opr1) : &or_fun($hash_opr2,$hash_opr1); push(@res_stack,\%res); } else { print "Eval function::EvalPostfix in inside else \n"; push(@res_stack,$_); } } return $res_stack[0]; } ################################################################# # Created By Pradeep Kamat # Created On :- 31/03/2005 (dd/mm/yyyy) # Description :- function takes two operand and perform logical # AND operation on them # Input :- two operand as hash reference # Return :- hash containing AND result ################################################################# sub and_fun { #print "\n Inside AND_FUN Functin"; my ($process,$final)= @_; my %ret_hash; my @key_val = keys(%{$process}); if (scalar(@key_val) == 0 || scalar(keys(%{$final})) == 0 ) { #print "\n Leaving AND_FUN Functin22222"; return %ret_hash; } foreach $_ (@key_val) { if (exists($final->{$_})) { #print "\n File Name :- $_ And_fun Result :- $final->{$_}"; $ret_hash{$_}=$process->{$_}; } } return %ret_hash; } ################################################################# # Created By Pradeep Kamat # Created On :- 31/03/2005 (dd/mm/yyyy) # Description :- function takes two operand and perform logical # OR operation on them # Input :- two operand as hash reference # Return :- hash containing OR result ################################################################# sub or_fun { #print "\n Inside OR_FUN Functin"; my ($process,$final)= @_; my @key_val = keys(%{$process}); foreach $_ (@key_val) { if (exists($final->{$_})) { $final->{$_}=$process->{$_}; } } #print "\n Leaving OR_FUN Functin"; return %{$final}; } ################################################################# # Created By Pradeep Kamat # Created On :- 31/03/2005 (dd/mm/yyyy) # Description :- function takes search string as an input # and search it in the list of files and returns # files containing search string and count of # matches # Input :- search string # Return :- hash containing match result ################################################################# sub getMatch { print "\n Inside GETMATCH Function\n"; my $in =@_[0]; my @file_arr =@{@_[1]}; my (@match); #stores output of the search my %arr_match; open(FL,"> /hm/aroras/match.log"); #print ("\$in :- $in \n "); chomp ($in); print "\$search_ele :-$in" . ": \n"; #@file_arr= glob "/usr/local/share/axyftp/help/*.*"; print "Getmatch::File arrary :- @file_arr\n"; @match = fgrep { /$in/ } @file_arr; foreach $local (@match) { print "File Name :- $local->{filename} count is :- $local->{count}\n\n"; if($local->{count} ne '0') { $arr_match{$local->{filename}}=$local->{count}; print "\n function1 called \n"; print FL "pattren :- $search_ele"; print FL "File Name :- ". $local->{filename}. "\n"; print FL "Count :- " . $local->{count}. "\n"; my @key_arr = keys(%{$local->{matches}}); foreach $key_arr (@key_arr) { print FL "Matches :- " . $local->{matches}->{$key_arr} . "\n"; print FL "\n"; } } } close(FL); #open(FL1,"> /hm/aroras/res.log"); return %arr_match; } ################################################################# # Created By Sangita Arora And Pradeep Kamat # Created On :- 04/04/2005 # Description :- Reads the file for dir path and file filter # Input :- files containing schema # Return :- void ################################################################# sub inputfields { my (@ret_arr); $filepath=$_[0]; open(FL,"<$filepath") or die "Cannot open $filePath: $!"; @sehema=<FL>; for(my $i=0;$i<=$#sehema;$i++) { @fields=split(/\|/,$sehema[$i]); #print ("test:::$sehema[0]"); my $logical_exp; my %arg_hash; for($x=4;$x<=$#fields;$x++) { if ($x == 4) { my @temp_arr = split(/ /,$fields[$x]); foreach(@temp_arr) { if (/AND|OR|\&\&|\|\|/) { $logical_exp.= /AND|\&\&/ ? " AND" : " OR"; } else { print "Inside Else\n"; $logical_exp.=$_; } } } if ($x != 5 && $x != 4) { if ( $x % 2 == 0) { my $str =$fields[$x+1]; $arg_hash{$fields[$x]} = $str; #print"inputfields::Hash is :- $arg_hash{$fields[$x]}" } } } my $dir=$fields[2]; my $filefilter=$fields[3]; my @filelist=filefinder($dir,$filefilter); #print "File list :- @filelist \n\n"; $ret_arr[$i] = ({ "File_List" => \@filelist, "Logic_exp" => $logical_exp, "Hash_search" => \%arg_hash, }); #print " \n Logical Expression is :- $logical_exp\n"; } close(FL); return @ret_arr; } ################################################################# # Created By Sangita Arora # Created On :- 04/04/2005 # Description :- Fetch files from the given directory depending upon filter # Input :- file path and file filter # Return :- fully qulified file name array ################################################################# sub filefinder { $dirinput=$_[0]; $filefilterinput=$_[1]; print "\nfind $dirinput -name $filefilterinput"; $str=`find $dirinput -name "$filefilterinput" `; @array=split(/\n/,$str); for (my $i=0;$i<=$#array;$i++) { chomp($array[$i]); print "$i:$array[i]::\n"; $mystr=$array[$i]; @temp=~split(/:/,$mystr); print("Match") if($temp[2]=~m/Permission/); } print("\n\n\nendarray"); return @array; }


This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

Please report any issues with rt.cpan.org to rt-cpan-admin@bestpractical.com.