2013-09-26 91 views
2
eErrorT ChainCtrlExit (ChainCtrlT * pChainCtrl) 
ChanT* ChainCtrlGetBitStreamChan (ChainCtrlT * pChainCtrl, 
char * name  
) 
eErrorT ChainCtrlInit (ChainCtrlT * pChainCtrl, 
char * name, 
int instance, 
void * pOwner  
) 

int SymContDecNamesCount = (sizeof(SymContDecNames)/sizeof(SymContDecNames[0])) 
char* SymContEncNames[] 
int SymContEncNamesCount = (sizeof(SymContEncNames)/sizeof(SymContEncNames[0])) 

I want to extarct only function arguments ...that is 

OUTPUT我需要一條線Perl的正則表達式 - 提取函數定義參數

ChainCtrlT * pChainCtrl 
ChainCtrlT * pChainCtrl, char * name 
ChainCtrlT * pChainCtrl, char * name, int instance, void * pOwner   

我的代碼只提取函數定義參數

open(FILE, "< functions2.txt") or die $!; 
open(FILE1, "> functions3.txt") or die $!;    

my @Array1=<FILE>; 
foreach my $text (@Array1){ 
    $text =~ /\((.+)\)/; 
    print FILE1 $text; 
} 

但它解壓到一切新的文件。基本上文件內容的流暢

回答

2
open(my $FILE, "<", "functions2.txt") or die $!; 
open(my $FILE1, ">", "functions3.txt") or die $!;    


my $s = do { local $/; <$FILE>; }; 
while ($s =~ /^ \S+ \s+ \S+ \s* \((.+?) \) /xsmg) { 
    my $arg = $1; 
    $arg =~ tr|\r\n||d; 
    print $FILE1 "$arg\n"; 
} 
+1

工作正常。由於我是perl的新手,如果你能分享一些鏈接來理解如何解決這個問題,而不是盲目地複製你的代碼,那將是非常好的。 –

+0

@ Ad-vic check perldoc documentation => [link1](http://perldoc.perl.org/perlre.html#Modifiers) [link2](http://perldoc.perl.org/perlretut.html#Global匹配) [link3](http://perldoc.perl.org/perlvar.html#Variables-related-to-filehandles) –