Le script ci-dessous prend les noms de fonctions dans un fichier texte et numérise un dossier contenant plusieurs fichiers c, h. Il ouvre ces fichiers un par un et lit chaque ligne. Si la correspondance est trouvée dans une partie quelconque des fichiers, elle imprime le numéro de ligne et la ligne qui contient la correspondance.Comment puis-je trouver les chaînes d'un fichier dans un autre fichier en Perl?
Tout fonctionne correctement, sauf que la comparaison ne fonctionne pas correctement. Je serais très reconnaissant à quiconque résout mon problème.
#program starts:
use FileHandle;
print "ENTER THE PATH OF THE FILE THAT CONTAINS THE FUNCTIONS THAT YOU WANT TO
SEARCH: ";#getting the input file
our $input_path = <STDIN>;
$input_path =~ s/\s+$//;
open(FILE_R1,'<',"$input_path") || die "File open failed!";
print "ENTER THE PATH OF THE FUNCTION MODEL: ";#getting the folder path that
#contains multiple .c,.h files
our $model_path = <STDIN>;
$model_path =~ s/\s+$//;
our $last_dir = uc(substr ($model_path,rindex($model_path, "\\") +1));
our $output = $last_dir."_FUNC_file_names";
while(our $func_name_input = <FILE_R1>)#$func_name_input is the function name
#that is taken as the input
{
$func_name_input=reverse($func_name_input);
$func_name_input=substr($func_name_input,rindex($func_name_input,"\("+1);
$func_name_input=reverse($func_name_input);
$func_name_input=substr($func_name_input,index($func_name_input," ")+1);
#above 4 lines are func_name_input is choped and only part of the function
#name is taken.
opendir FUNC_MODEL,$model_path;
while (our $file = readdir(FUNC_MODEL))
{
next if($file !~ m/\.(c|h)/i);
find_func($file);
}
close(FUNC_MODEL);
}
sub find_func()
{
my $fh1 = FileHandle->new("$model_path//$file") or die "ERROR: $!";
while (!$fh1->eof())
{
my $func_name = $fh1->getline(); #getting the line
**if($func_name =~$func_name_input)**#problem here it does not take the
#match
{
next if($func_name=~m/^\s+/);
print "$.,$func_name\n";
}
}
}
Qu'est-ce que tout ce que reverse/substr/rindex fait à $ func_name_input? – Schwern