我正在编写一个解析器来捕获文本文件中的值。除了两个值,我能够捕获所有值。
有人可以帮助我获得这两个值吗?
这是我的代码:
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
吗?
如果此处有不明确的解释,请告诉我。
答案 0 :(得分:1)
请试试这个,它会让你充满活力。
while (defined(my $line = <$fh>)) {
if($line =~ /(PCNOC\_.*?\d+)\s*(\w+):\s*(.*)/i){
print "$1 ==> $2 ==> $3\n";
}
}
答案 1 :(得分:0)
你可以试试这个。
if($line =~ /ADDR1:\s*(.*)/i){
.....
}
elsif($line =~ /ADDR0:\s*(.*)/i){
.....
}
答案 2 :(得分:0)
/ADDR0\w\s*(.+?\W+)/i
^^
由于:
不是单词char,因此无法匹配。修正:
/ADDR0:\s*(.*)/