perl脚本中文件中定位查找特殊字段并输出到表格中
现有一个文件file,要在里面查找“BFGS:Geometryoptimizationcompletedsuccessfully.”之后出现的第一个Latticepara...
现有一个文件file,要在里面查找“BFGS : Geometry optimization completed successfully.”之后出现的第一个Lattice parameters(A)下第三行的内容,将其输出到std的表格中。
展开
展开全部
看这个需求,不需要正在表达式都可以,如果要使用正则表达式,程序逻辑要修改为:直接读出所有内容,然后连接为一个大传,正在匹配后,使用$`、$'等变量获取匹配的后面部分内容,再次进行匹配。
从内存和速度的角度来说,不使用正则也可以获取指定内容,使用状态变量的方式,设置一个标记变量(例如$stst),0表示没有遇到BFGS :,1表示遇到BFGS、但是没有遇到Lattice ,2表示遇到了Lattice ,3表示Lattice 之后1行,4表示Lattice 之后2行,5表示Lattice 之后第五行,就是需要的结果,代码逻辑如下:
my $stat=0;
while($line=<File($a)>)
{
if ($stat==0){
$stat=1 if ($line eq 'BFGS:.....');
}elsif ($stat==1){
$stat=2 if ($line eq ' Lasttice ....');
}elsif ($stat>=2 && $stat<=4){
$stat++;
}elsif ($stat==5){
last; #找到结果,直接退出
}
}
close(File($a));
print $line;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询