2016-04-05 7 views
-1

私は、テキストファイルから値を取得するパーサーを作成しています。 2つの値の他に、私はすべての値を取得することができます。値をキャプチャするための正規表現 - Perl

これらの2つの値を得るために私を助けてくれる人はいますか?ここで

は私のコードは次のとおりです。

use warnings; 

open(my $fh, "<", "$tZPath\\Diag.txt") || print "can't open file filename : $!\n"; 

my ($aBT_Slave, $iD, $hready, $address); 

while (defined(my $line = <$fh>)) { 

    if ($line =~ /ID\:\s*(.+?\W+)/i) { 
     $iD = $1; 
     print " Id -> $iD \n"; 
    } 
    elsif ($line =~ /HREADY\:\s*(.+?\W+)/i) { 
     $hready = $1; 
     print " hready -> $hready \n"; 
    } 
    elsif ($line =~ /ADDR0\w\s*(.+?\W+)/i) { 
     $address = $1; 
     print " address -> $address \n"; 
    } 
    elsif ($line =~ /PCNOC\_(.*?\d+)/i) { 
     $aBT_Slave = "PCNOC_" . $1; 
     print " aBT_Slave -> $aBT_Slave \n"; 
    } 
} 

ログファイルの内容:

ABT PCNOC_9 ID: 0x0000430c 
ABT PCNOC_9 ADDR0: 0x000000e0 
ABT PCNOC_9 ADDR1: 0x00000000 
ABT PCNOC_9 HREADY: 0xfffffffd 
ABT PCNOC_9 Slaves: 5 
Fatal Error: AHB_TIMEOUT 

誰がログからADDR0値とPCNOC_9を得るために私を助けてくださいことはできますか? こちらで不明確な治療を受けている場合はお知らせください。

答えて

1

これを試してください。完全に動的にフェッチされます。

while (defined(my $line = <$fh>)) { 
     if($line =~ /(PCNOC\_.*?\d+)\s*(\w+):\s*(.*)/i){ 
      print "$1 ==> $2 ==> $3\n"; 
     } 
} 
0

これを試すことができます。

if($line =~ /ADDR1:\s*(.*)/i){ 
..... 
} 
elsif($line =~ /ADDR0:\s*(.*)/i){ 
..... 
} 
+0

ながら_why_に関する 追加のコンテキストを提供する、および/または、それは質問が大幅に長期的 値を改善する 答え_how_:修正。あなたの答えを[編集]して、説明を加えてください。 –

0
/ADDR0\w\s*(.+?\W+)/i 
     ^^ 

これは:はワード文字ではありませんので、一致しません。このコードは質問に答えること

/ADDR0:\s*(.*)/