perl脚本中文件中定位查找特殊字段并输出到表格中

现有一个文件file,要在里面查找“BFGS:Geometryoptimizationcompletedsuccessfully.”之后出现的第一个Latticepara... 现有一个文件file,要在里面查找“BFGS : Geometry optimization completed successfully.”之后出现的第一个Lattice parameters(A)下第三行的内容,将其输出到std的表格中。 展开
 我来答
阳光上的桥
2018-01-31 · 知道合伙人软件行家
阳光上的桥
知道合伙人软件行家
采纳数:21424 获赞数:65795
网盘是个好东东,可以对话和传文件

向TA提问 私信TA
展开全部

看这个需求,不需要正在表达式都可以,如果要使用正则表达式,程序逻辑要修改为:直接读出所有内容,然后连接为一个大传,正在匹配后,使用$`、$'等变量获取匹配的后面部分内容,再次进行匹配。

从内存和速度的角度来说,不使用正则也可以获取指定内容,使用状态变量的方式,设置一个标记变量(例如$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;
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式