open (ansf1,"$ansFile") or die "8\n"; #以下代码统计答案中的语音总时长 $answerflag=0; $position1=0; $dataflag1=0; $answer_total=0; while($ansfline1=<ansf1>) { #$pre1=$position1; #$position1 = tell(ansf1); chomp($ansfline1); if ($ansfline1 eq "\"data\"") { $dataflag1=1; print "ansfline1 is $ansfline1\n"; $position1 = tell(ansf1); next; } $pre1=$position1; # 这两段是关键:记住上一行 $position1 = tell(ansf1); # 这两段是关键:记住上一行 if($dataflag1==1) { print "dataflag1 is $dataflag1 and line is $ansfline1\n"; if($answerflag==0) { if ( !( $ansfline1 =~ /\"/ )) { $answerflag=1; $answer_time1=$ansfline1; $pre21=tell(ansf1); } } elsif($answerflag==1) { if ( ! ( $ansfline1=~/\"/ )) { $answerflag=2; $answer_time2=$ansfline1; } else { #$position_minus=$position-$pre; seek(ansf1,$pre1,0); #回退1行 $position_change1 = tell(ansf1); #print "position minus 1 is $position_change1\n"; $answerflag=0; } } elsif($answerflag==2) { #if($ansfline1=~ /[\x80-\xFF]+?/) if($ansfline1=~/\"/) { #print "compute\n"; $count++; print "$count $ansfline1\n"; $answer_total+=$answer_time2-$answer_time1; #print(frecOut "find $resfline in $resFile is not match in $ansFile\n"); } else { seek(ansf1,$pre21,0); #回退两行 $position_change1 = tell(ansf1); #print "position minus 2 is $position_change\n"; } $answerflag=0; } #if( !( $ansfline=~/"/ ) ) #{ # $answer_time1=$ansfline; #} } } close(resf); close(ansf1);