24小时热门版块排行榜    

查看: 1013  |  回复: 5
当前主题已经存档。

gongxd325

至尊木虫 (文坛精英)

[交流] 【求助】字符串和数值跨行读取问题【已完结】

想编程从Gaussian的计算结果中取出最后的能量(“HF=”后面的数字,如1所示,该情况下字符串和数字都在同一行上,处理并不困难)

问题是,字符串“HF=”可能分开在两行上(如2所示),“HF=”后的数字也可能在两行上且小数点前后的位数不固定(如3所示)。最大的困难是字符串“HF=”跨行时怎么确定其位置?

请教:
(a)如何编程才能保证不管什么情况,都能正确判断“HF=”的位置并读出其值?
(b)字符和数字混合时有什么好办法把数字读出来?


(1)
vB.03|State=1-A'|HF=-834.0759008|R
MSD=4.635e-009|RMSF=7.697e-005|Dip
(2)
=x86-Win32-G03RevB.03|State=1-A'|H
F=-834.0759008|RMSD=4.635e-009|RMS
(3)
32-G03RevB.03|State=1-A'|HF=-834.0
80|RMSD=4.635e-009|RMSF=7.697e-005

[ Last edited by 余泽成 on 2009-11-19 at 13:41 ]
回复此楼

» 猜你喜欢

一个人做点好事并不难难的是一辈子做好事!!!
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

★ ★
gongxd325(金币+2,VIP+0):感谢! 8-2 11:51
换种思路,如何?

你现在查的其实是 gaussian 给出的最后存档的结果,即 archive

你可以在结果文件中查找类似于下面这一行:

SCF Done:  E(RHF) =  -1554.11090384     A.U. after    1 cycles

这里的 E(RHF) 就是你需要的 HF 的能量。当然,因为这个会出现很多次,所以你需要做的是确定最后一个,或最小的一个,当然,这要简单很多了……
2楼2009-08-02 10:35:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

gongxd325

至尊木虫 (文坛精英)

谢谢snoopyzhao,不过以你建议的这种方式只能对某一种方法适用,因为HF,DFT,MP2计算中间输出能量的格式都不一样,只有在archive中是一致的。
为了防止字符串"HF="分开在两行时可能出现bug,我把G03也作为特征字符串,但假如HF=和G03同时分开在两行,就肯定出问题了。
所以,我想知道是不是有更好的办法。
一个人做点好事并不难难的是一辈子做好事!!!
3楼2009-08-02 11:51:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

★ ★
gongxd325(金币+2,VIP+0):谢谢,有点启发 8-3 11:43
用 fortran 处理字符串是一件很累人的事情。

用 index 查 HF,如果返回值不是零,那么读后面的数值,如果没有碰到 | 就读下一行并过滤掉空白字符,直到碰到 |,这可以处理 (1),(3) 两种情况。

判断一行的最后一个非空白字符是不是 H,如果是,判断下一行的第一个非空白字符是不是 F,如果两者成立,读后面的数值。这可以处理第 (2) 种情况。

我只是纸上谈兵了,因为我基本上不用 fortran 处理字符串,呵呵……
4楼2009-08-02 19:16:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

gongxd325

至尊木虫 (文坛精英)

我现在的思路,是先以HF=和G03为特征字符串确定位置,然后把连续3行写成一行,再读能量值,可保证能量在一行。所以,只要不发生字符串HF=和G03同时分开在两行就没有问题。
不知道是不是有更好的办法?
另外,从字符串中如何读数字比较方便?我是把数字当字符串读出后写到文件中,再从文件中以数字形式读出来的。
一个人做点好事并不难难的是一辈子做好事!!!
5楼2009-08-03 11:52:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

magic7004

金虫 (职业作家)


gongxd325(金币+1,VIP+0):什么语言都可以,只要能解决问题,能不能给编一段? 8-3 15:01
这个貌似用c#很容易啊。
流氓不可怕,可怕的是流氓有文化,有文化又BH的流氓无敌~~!
6楼2009-08-03 12:33:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 gongxd325 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见