0

我有一个函数名称“ChainCtrlBuildChain”作为文件(文件)中的文本。

A c file(FILE1) with content

VideoChainT* ChainCtrlBuildChain(ChainCtrlT* pChainCtrl, char* pChainName, ChainDefT* pDef)
            {
          ...
            {
 ModTrace((ModT*) pChainCtrl, "ChainCtrlBuildChain: ERROR, chain init failure [chain: %4.4s inst: %d] [err: %d]\n",
                        ...
            }

我的代码:

my @Array=<FILE>;
my @Array1=<FILE1>;

foreach my $text (@Array1){
if (index($text, $Array[0]) !=-1)
{
print "$text \n";
}
}

给出这个输出:

VideoChainT* ChainCtrlBuildChain(ChainCtrlT* pChainCtrl, char* pChainName, ChainDefT* pDef)
ModTrace((ModT*) pChainCtrl, "ChainCtrlBuildChain: ERROR, chain init failure [chain: %4.4s inst: %d] [err: %d]\n",

我想要这个:

VideoChainT* ChainCtrlBuildChain(ChainCtrlT* pChainCtrl, char* pChainName, ChainDefT* pDef)

我必须将其概括为输入文件是由用户而不是固定的。

我刚在想

if (index($text, $Array[0]) != -1 && index('**WHAT SHOULD I WRITE SO THAT IT SKIPS ANY ARGUMENTS PRESENT AND JUST CHECKS WHETHER ITS A FUNCTION DEFINITION OR NOT**')!= -1) 
4

1 回答 1

1

如果您满足于使用您的函数名称加上(足够的函数定义,这应该可以工作:

#!/usr/bin/perl

use warnings;
use strict;

my $function_file = 'functions.txt';
my $src_file = 'src.c';

open(my $ff,'<',$function_file) or die "Cant open $function_file: $!\n";
open(my $sf,'<',$src_file) or die "Cant open $src_file: $!\n";

my @array = <$ff>;
my @array2 = <$sf>;

close($ff);
close($sf);

foreach my $func (@array){
    chomp $func;
    foreach my $src_line (@array2){
        if ($src_line =~ /$func\(/){
            print $src_line;
        }
    }
}

顺便说一句:如果你使用 3-arg open,你的 perl 生活会减少痛苦!

于 2013-08-01T11:10:20.830 回答