1

関数名を含むファイル FILE1 があります。

FILE1 (さらにいくつかの関数名も):

ChainCtrlBuildChain

FILE2 には以下が含まれます。

pChain = ChainCtrlBuildChain(pChainCtrl, pChainCtrl->ChainTable[i].col[j], pDefs);
...
if (eRetVal != kNoError)
            {
                ModTrace((ModT*) pChainCtrl, "ChainCtrlBuildChain: ERROR, chain init failure [chain: %4.4s inst: %d] [err: %d]\n",
...
VideoChainT* ChainCtrlBuildChain(ChainCtrlT* pChainCtrl, char* pChainName, ChainDefT* pDef)
            {
               ...
            }

関数定義のみを表示し、関数宣言を除外したい。

必要な出力

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

コード

#search for function in the file
use strict;
use warnings;

my $function_file = 'functions.txt';
my $src_file = 'ChainController.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;   
    }
  }
}

関数名の後にチェックします(が、関数宣言と関数定義の両方を示しています。

;関数宣言のみが同じ行にあるため、関数名と同じ行でチェックする方法についてのアイデア;

4

1 に答える 1

1

「行末まで ; はありません」を使用できます。

/$func\([^;]+$/

これはまだ機能しない可能性があることに注意してください。100% 機能させる唯一の方法は、パーサーを使用することです。

于 2013-08-06T11:20:15.570 に答える