![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-23 15:52 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,273 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 应网友broodwu写的一个批处理 |
| 可打印版本 3,584 / 15 |
| 第1楼 chenhui530 | 发表于 2005-03-15 00:00 |
| 高级用户 发帖 273 积分 772 | |
|
应网友broodwu写的一个批处理 如何读取文件内的特定文字,并重定向到另一个文件?
操作系统是win2000,可以使用任何外部环境程序,想实现以下功能: 在一个文件里面,有以下很多的数据,也有其他无用的字符。 其中" Dipole moment (Debye):"是区别于其他字符的字符。其实最后两个字符" :"已经足够区别其他的字符了目的想把 " Dipole moment (Debye):" 下面的一行数据(也就是" X= -6.0857 Y= 1.8518 Z= 1.1246 Tot= 6.4598") 重定向到另一个文件,应该怎么写批处理?请不吝指教,谢谢。 如果能够把x y z三个数值提出来,重定向成 "-6.0875 1.8518 1.1246"最好,如果不行的话,一整行也可以,再次感谢。 以下是文件out的内容 Dipole moment (Debye): X= -6.0857 Y= 1.8518 Z= 1.1246 Tot= 6.4598 批处理如下: for /f "skip=1 tokens=1,2,3,4,5,6" %%a in (1.txt) do set a=%%a%%b && set b=%%c%%d && set c=%%e%%F echo %a% echo %b% echo %c% |
|
| 第2楼 bush | 发表于 2005-03-15 00:00 |
| 银牌会员 发帖 730 积分 2,165 | |
|
好像不行!
|
|
| 第3楼 broodwu | 发表于 2005-03-15 00:00 |
| 初级用户 发帖 23 积分 185 | |
|
先对你表示感谢。 我试验了,好像不行,因为 Dipole moment (Debye): 这一行的前后可能有其他字符,所以需要查到这个特征字符,再把该行的下一行导入到另一个文件里面。我觉得要用到lmod这个程序才比较好做,希望各位高手能够拔刀相助。再次感谢 chenhui530 out文件部分内容应该如下Sum of Mulliken charges= 0.00000
Electronic spatial extent (au): <R**2>= 1554.1028 Charge= 0.0000 electrons Dipole moment (Debye): X= -6.0857 Y= 1.8518 Z= 1.1246 Tot= 6.4598 GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad Internal Forces: Max 0.045440870 RMS 0.014163473 Step number 1 out of a maximum of 75 All quantities printed in internal units (Hartrees-Bohrs-Radians) |
|
| 第4楼 chenhui530 | 发表于 2005-03-15 00:00 |
| 高级用户 发帖 273 积分 772 | |
|
你条件只告诉我Dipole moment (Debye):
X= -6.0857 Y= 1.8518 Z= 1.1246 Tot= 6.4598这个的嘛 |
|
| 第5楼 chenhui530 | 发表于 2005-03-15 00:00 |
| 高级用户 发帖 273 积分 772 | |
|
终于还是不使用第三方工具搞定了麻烦是有点麻烦了不知道哪位仁兄还有更好的方法吗for /f "delims=" %%a in (1.txt) do echo %%a>>2.txt
fc 1.txt 2.txt>3.txt for /f "eol=* delims=" %%a in (3.txt) do echo %%a>>4.txt for /f "skip=3 delims=GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad" %%b in (4.txt) do echo %%b>>5.txt for /f "tokens=1,2,3,4,5,6" %%a in (5.txt) do set a=%%a%%b && set b=%%c%%d && set c=%%e%%f echo %a% echo %b% echo %c% pause for /l %%a in (1,1,5) do del /q %%a.txt |
|
| 第6楼 broodwu | 发表于 2005-03-16 00:00 |
| 初级用户 发帖 23 积分 185 | |
|
好象都是不可以啊。不过要多谢你。可能我还是没有说清楚问题。因为Dipole moment (Debye):
X= -6.0857 Y= 1.8518 Z= 1.1246 Tot= 6.4598这些字符前后都有字符,而且字符内容和字符的多少都是不确定的,x y z也有多组,我觉得最好就是用 找特征字符的方法做。我用c语言作了一个程序,达到了这个功能。a.txt 是要处理的文件,运行go.exe之后,会产生结果文件b.txt |
|
| 第7楼 chenhui530 | 发表于 2005-03-16 00:00 |
| 高级用户 发帖 273 积分 772 | |
|
你怎么老是这样你要把条件说清楚啊?不说清楚别人怎么给你解决啊?
|
|
| 第8楼 broodwu | 发表于 2005-03-16 00:00 |
| 初级用户 发帖 23 积分 185 | |
| 第9楼 chenhui530 | 发表于 2005-03-16 00:00 |
| 高级用户 发帖 273 积分 772 | |
|
for /f "skip=21 delims=" %%a in (a.txt) do echo %%a>>1.txt
for /f "skip=4 delims=" %%a in (1.txt) do echo %%a>>2.txt fc 1.txt 2.txt>3.txt for /f "eol=* delims=" %%a in (3.txt) do echo %%a>>4.txt for /f "skip=7 delims=GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad" %%b in (4.txt) do echo %%b>>5.txt for /f "eol=E delims=" %%a in (5.txt) do echo %%a>>6.txt for /f "tokens=1,2,3,4,5,6" %%a in (6.txt) do set a=%%a%%b && set b=%%c%%d && set c=%%e%%f echo %a% echo %b% echo %c% pause for /l %%a in (1,1,6) do del /q %%a.txt |
|
| 第10楼 broodwu | 发表于 2005-03-16 00:00 |
| 初级用户 发帖 23 积分 185 | |
|
还是不行啊,chenhui530的批处理我试了一下,只能把第一组数据的保留下来。当有多组数据就只能取到第一组数据,而且格式稍微变化一下就没办法了。我想应该用查找特征字符的办法来完成这个功能。比如查找到 (Debye): 这8个字符,那么下面一行自然就是需要的东西了(只截取其中的x,y,z的值)。而且有多组数据时也能够输出多组数据。比如下面这个a.txt文件,
~~~~~~~~~~~~~~~~~ sfjhjhof Mulliken charges= 0.00000 Electronic spatial extent (au): <R**2>= 1554.1028 Dipole moment (Debye): X= -6.0857 Y= 1.8518 Z= 1.1246 Tot= 598 GradGradGraGradGradGradGradGrad Internal Forces: Max 0.045440870 RMS 0.014163473 Step number 1 out of a maximum of 75 All units (Hartrees-Bohrs-Radians) $FgSum of Mulliken charges= 0.00000 Electronic spatial extent (au): <R**2>= 1554.1028 Charge= 0.0000 electrons Dipole moment (Debye): X= -6.0877 Y= 1.8251 Z= 1.12987 Tot= 6.45433598 Sum of Mulliken charges= 0.00000 Electronic spatial extent (au): <R**2>= 1554.1028 Charge= 0.0000 electrons Dipole moment (Debye): X= -7.0857 Y= 5.82818 Z= 1.3046 Tot= 6.4598 GradGradGr Internal Forces: Max 0.045440870 RMS 0.014163473 Steper 1 out of a maximum of 75 All quantities printed in internal units (Hartrees-Bohrs-Radians) ~~~~~~~~~~~~~~~~~ 就应该输出下面这样一组数据, -6.0857 1.8518 1.1246 -6.0877 1.8251 1.12987 -7.0857 5.82818 1.3046 或者下面一组数据也可以 X= -6.0857 Y= 1.8518 Z= 1.1246 Tot= 6.4598 X= -6.0877 Y= 1.8251 Z= 1.12987 Tot= 6.45433598 X= -7.0857 Y= 5.82818 Z= 1.3046 Tot= 6.4598 |
|
| 第11楼 broodwu | 发表于 2005-03-16 00:00 |
| 初级用户 发帖 23 积分 185 | |
|
我找到一个最简单的办法了 ,因为在要处理的a.txt文件中,需要的数据里面肯定有x= y= z=这些字符,只需要一个命令就可以找到这些字符
find /i "x=" a.txt>b.txt find /i "y=" b.txt>c.txt find /i "z=" c.txt>d.txt 这样d.txt就是需要的数据了 |
|
| 第12楼 chenhui530 | 发表于 2005-03-16 00:00 |
| 高级用户 发帖 273 积分 772 | |
|
你每次给出答案你就变一次我真的是怕了哦我给出的答案在你给我的系统都是能完成的我都测试过了的
|
|
| 第13楼 chenhui530 | 发表于 2005-03-16 00:00 |
| 高级用户 发帖 273 积分 772 | |
|
我真是怕了你了我每次给出答案你就更改数据!我是真怕了你!但是我每次给出的答案都是对的!我都经过测试的!
|
|
| 第14楼 chenhui530 | 发表于 2005-03-16 00:00 |
| 高级用户 发帖 273 积分 772 | |
以下是引用broodwu在2005-3-16 15:26:43的发言: 其实要得到这样的数据也不是很难!只是我现在不想再写了!等下你又变了我是等于白写 |
|
| 第15楼 broodwu | 发表于 2005-03-16 00:00 |
| 初级用户 发帖 23 积分 185 | |
|
@find /i "x=" a.txt>a
@find /i "x=" a>b @find /i "x=" b>c @for /f "skip=2 tokens=2,4,6 delims= " %%i in (c) do @echo %%i %%j %%k>>b.txt @del a&@del b&@del c 这样就可以达到要求了 |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |