计算化学公社

 找回密码 Forget password
 注册 Register
Views: 1130|回复 Reply: 11
打印 Print 上一主题 Last thread 下一主题 Next thread

[C/C++] 求助:取出指定字段的文字我需要一个C语言小程序

[复制链接 Copy URL]

159

帖子

3

威望

1507

eV
积分
1726

Level 5 (御坂)

跳转到指定楼层 Go to specific reply
楼主
我一直手动从log文件取出指定字段的内容,感觉很费事。
比如需要取出第一激发态结构优化后的波长和振子强度。就用记事本打开log文件搜索“Excited State   1:  ”然后不停地点查找下一个。直到最后一个,然后复制。


我现在想实现自动处理。比如,可否弄个C语言小程序,在程序中输入特定字段,输入文件路径和文件名,它就把我想要的结果输出到一个txt文件中。
实现这个目的,是不是需要先下载一个免费的C语言编译器,安装它。
然后写个小程序,中间指定搜索字符串。编译成可执行文件。然后用这个可执行文件执行我的log文件,把结果输出到指定的txt文件中?


各位老师都用的什么样的C语言编译器,是免费的么?你们把程序也分享给我吧,我不会写C语言。
具体怎么操作。请哪位老师详细解读一下。
或者,Multiwfn.exe是否自带这种功能?

306

帖子

2

威望

3260

eV
积分
3606

Level 5 (御坂)

2#
发表于 Post on 2024-1-28 10:29:43 | 只看该作者 Only view this author
本帖最后由 lyj714 于 2024-1-28 10:31 编辑

不会C,基础都没有的话还是算了。你这需求完完全全就可以用shell命令解决了,非常容易。学一学sed,grep,awk这三个基础语法就能解决你的问题了。再不济python也很容易上手

评分 Rate

参与人数
Participants 1
eV +2 收起 理由
Reason
liaorongbao + 2 谢谢

查看全部评分 View all ratings

159

帖子

3

威望

1507

eV
积分
1726

Level 5 (御坂)

3#
 楼主 Author| 发表于 Post on 2024-1-28 11:25:48 | 只看该作者 Only view this author
lyj714 发表于 2024-1-28 10:29
不会C,基础都没有的话还是算了。你这需求完完全全就可以用shell命令解决了,非常容易。学一学sed,grep,awk ...

谢谢!我研究研究shell命令

5万

帖子

99

威望

5万

eV
积分
112496

管理员

公社社长

4#
发表于 Post on 2024-1-29 04:35:12 | 只看该作者 Only view this author
认真看了此文就知道怎么做了
详谈Multiwfn的命令行方式运行和批量运行的方法
http://sobereva.com/612http://bbs.keinsci.com/thread-24929-1-1.html

评分 Rate

参与人数
Participants 1
eV +3 收起 理由
Reason
liaorongbao + 3 谢谢

查看全部评分 View all ratings

北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入“北京科音”微信公众号获取北京科音培训的最新消息、避免错过网上有价值的计算化学文章!
欢迎加入人气非常高、专业性特别强的综合性理论与计算化学交流QQ群“思想家公社QQ群”:1号:18616395,2号:466017436,3号:764390338,搜索群号能搜到哪个说明目前哪个能加,合计9000人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大的量子化学波函数分析程序)
ResearchGate:https://www.researchgate.net/profile/Tian_Lu
Money and papers are rubbish, get a real life!

180

帖子

0

威望

1157

eV
积分
1337

Level 4 (黑子)

5#
发表于 Post on 2024-1-29 09:04:37 | 只看该作者 Only view this author
直接cat XXXX.log |grep "Excited State   1:"|tail -n 1 >> XXX.txt 不就好了

评分 Rate

参与人数
Participants 1
eV +2 收起 理由
Reason
liaorongbao + 2 谢谢

查看全部评分 View all ratings

24

帖子

0

威望

3457

eV
积分
3481

Level 5 (御坂)

6#
发表于 Post on 2024-1-29 14:00:49 | 只看该作者 Only view this author
如果在windows下面的话FileLocator也不错,我一般用这个搜索某个文件夹下面一批任务中的Normal termination,stable,imaginary frequencies等等,不过想要看激发能和振子强度我觉得还是用cat和grep命令比较好,我在windows上都是用cmder这个程序执行cat和grep命令读取的

评分 Rate

参与人数
Participants 1
eV +2 收起 理由
Reason
liaorongbao + 2 谢谢

查看全部评分 View all ratings

3814

帖子

4

威望

8002

eV
积分
11896

Level 6 (一方通行)

MOKIT开发者

7#
发表于 Post on 2024-1-29 15:13:04 | 只看该作者 Only view this author
这不需要会C语言,也不需要C语言(虽然C语言可以办到)

评分 Rate

参与人数
Participants 1
eV +1 收起 理由
Reason
liaorongbao + 1 谢谢

查看全部评分 View all ratings

自动做多参考态计算的程序MOKIT

153

帖子

0

威望

456

eV
积分
609

Level 4 (黑子)

极天的流星雨

8#
发表于 Post on 2024-2-2 14:38:18 | 只看该作者 Only view this author
啥都不会也行,问gpt
主要使用软件:VASP
目前从事稀土发光相关的第一性原理计算。
以前曾从事:蛋白质水溶液的分子动力学计算(NAMD、Gromacs);钙钛矿相关的第一性原理计算。

487

帖子

1

威望

4042

eV
积分
4549

Level 6 (一方通行)

9#
发表于 Post on 2024-2-2 14:55:54 | 只看该作者 Only view this author
  1. [xx@jx2-login01 xx]$ python2
  2. Python 2.7.5 (default, Aug  7 2019, 00:51:29)
  3. [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux2
  4. Type "help", "copyright", "credits" or "license" for more information.
  5. >>> import subprocess as sp
  6. >>> sp.check_output(["grep ' nm ' ZINDO.log | head"], shell=True).strip().split("\n")
  7. ['Excited State   1:      Singlet-A      2.3556 eV  526.33 nm  f=0.0000  <S**2>=0.000', ' Excited State   2:      Singlet-A      2.3710 eV  522.92 nm  f=0.0000  <S**2>=0.000', ' Excited State   3:      Singlet-A      2.3720 eV  522.70 nm  f=0.0000  <S**2>=0.000', ' Excited State   4:      Singlet-A      2.9042 eV  426.91 nm  f=0.5039  <S**2>=0.000', ' Excited State   5:      Singlet-A      2.9057 eV  426.69 nm  f=0.4989  <S**2>=0.000', ' Excited State   6:      Singlet-A      2.9300 eV  423.15 nm  f=1.2019  <S**2>=0.000', ' Excited State   7:      Singlet-A      3.2962 eV  376.14 nm  f=0.0023  <S**2>=0.000', ' Excited State   8:      Singlet-A      3.3007 eV  375.63 nm  f=0.0021  <S**2>=0.000', ' Excited State   9:      Singlet-A      3.3014 eV  375.55 nm  f=0.0026  <S**2>=0.000', ' Excited State  10:      Singlet-A      3.6388 eV  340.73 nm  f=0.0000  <S**2>=0.000']
复制代码
现代化学以狄拉克的一句“一切化学问题业已解决”为嚆矢。滥觞于经验主义传统的期望正失去它们的借鉴意义。但面对看似不可达的通往天堂之阶梯,我想循伍德沃德“最好的模型是你底物的对映异构体”的信仰好过过早地振翮。
我们怀揣热忱的灵魂天然被赋予对第一性的追求,不屑于单一坐标的约束,钟情于势能面彼端的芬芳。但

159

帖子

3

威望

1507

eV
积分
1726

Level 5 (御坂)

10#
 楼主 Author| 发表于 Post on 2024-2-19 15:54:41 | 只看该作者 Only view this author

417

帖子

1

威望

2200

eV
积分
2637

Level 5 (御坂)

11#
发表于 Post on 2024-2-20 15:46:49 | 只看该作者 Only view this author
论坛里有awk语法小结 http://bbs.keinsci.com/thread-36574-1-1.html 。由于我不熟悉激发态的计算,手头也没有可以作为示例的输出文件,就瞎猜着写一个吧。
  1. awk '{ if ($1 == "Excited" && $2 == "State") print $0 }' file.log
复制代码
如果在此基础上再改进一点,就是这样。
  1. awk '{ if ($1 == "Excited" && $2 == "State") printf("%s %s\n", $7, substr($9, 3)) }' file.log
复制代码


3622

帖子

3

威望

1万

eV
积分
18442

Level 6 (一方通行)

第一原理惨品小作坊

12#
发表于 Post on 2024-2-21 08:47:29 | 只看该作者 Only view this author
用python处理依赖的包比较多,但反过来其实也意味着生态强大,此外也没系统限制。
以test0399.com的数据为例:
get_excited_data.py
  1. import sys
  2. import re
  3. import numpy as np
  4. import pandas as pd

  5. with open(sys.argv[1]) as f:
  6.         text=f.read()

  7. pattern='Excited State\s+(\d+?):.*\s+(.*?)\s+nm.*f=(.*?)\s+.*\n'
  8. data=re.findall(pattern,text)
  9. data=np.array(data).T
  10. df={
  11.         'excited state':np.array(data[0],int),
  12.         'wavelength':np.array(data[1],float),
  13.         'oscillator strength':np.array(data[2],float),
  14. }
  15. df=pd.DataFrame(df)
  16. print(df)
复制代码

执行python3 get_excited_data.py test0399.log,你可以得到:
  1.    excited state  wavelength  oscillator strength
  2. 0              1      225.55               0.0000
  3. 1              2      201.28               0.0000
  4. 2              3      194.06               0.0000
  5. 3              4      194.06               0.0000
  6. 4              5      180.14               0.0601
  7. 5              6      179.00               0.0000
复制代码

不同数据的结构都不会一样,短短几行很难包打天下,反过来说数据格式的标准化也很重要。
需要说明的是如果不需要格式排成pandas表格,其实在用正则表达式findall之后就可以直接输出了,这样对numpy和pandas的依赖也就不需要了。

评分 Rate

参与人数
Participants 1
eV +3 收起 理由
Reason
liaorongbao + 3 谢谢

查看全部评分 View all ratings

日常打哑谜&&探寻更多可能。
原理问题不公开讨论,非商业性质讨论欢迎私聊。
本周忙

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2024-11-27 08:58 , Processed in 0.648525 second(s), 22 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list