中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: 应网友broodwu写的一个批处理 上一主题 | 下一主题
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『楼 主』:  应网友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%



http://www.msfans.net/bbs/
2005-3-15 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
bush
银牌会员




积分 2165
发帖 730
注册 2004-4-21
状态 离线
『第 2 楼』:  

好像不行!

2005-3-15 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
broodwu
初级用户




积分 185
发帖 23
注册 2005-2-27
状态 离线
『第 3 楼』:  

先对你表示感谢。 我试验了,好像不行,因为 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)


2005-3-15 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 4 楼』:  

你条件只告诉我Dipole moment (Debye):
    X=    -6.0857    Y=     1.8518    Z=     1.1246  Tot=     6.4598这个的嘛



http://www.msfans.net/bbs/
2005-3-15 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 5 楼』:  

终于还是不使用第三方工具搞定了麻烦是有点麻烦了不知道哪位仁兄还有更好的方法吗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




http://www.msfans.net/bbs/
2005-3-15 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
broodwu
初级用户




积分 185
发帖 23
注册 2005-2-27
状态 离线
『第 6 楼』:  

好象都是不可以啊。不过要多谢你。可能我还是没有说清楚问题。因为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

[此贴子已经被作者于2005-3-16 9:18:30编辑过]




2005-3-16 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 7 楼』:  

你怎么老是这样你要把条件说清楚啊?不说清楚别人怎么给你解决啊?



http://www.msfans.net/bbs/
2005-3-16 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
broodwu
初级用户




积分 185
发帖 23
注册 2005-2-27
状态 离线
『第 8 楼』:  

打开附件
上面这个附件是源代码和程序,a.txt文件是要处理的文件。
我觉得用批处理可能会更加简洁地解决这个问题,所以还是希望有人能写出批处理程序来,谢谢。


2005-3-16 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 9 楼』:  

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



http://www.msfans.net/bbs/
2005-3-16 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
broodwu
初级用户




积分 185
发帖 23
注册 2005-2-27
状态 离线
『第 10 楼』:  

还是不行啊,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

2005-3-16 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
broodwu
初级用户




积分 185
发帖 23
注册 2005-2-27
状态 离线
『第 11 楼』:  

我找到一个最简单的办法了 ,因为在要处理的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就是需要的数据了

[此贴子已经被作者于2005-3-16 15:48:42编辑过]




2005-3-16 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 12 楼』:  

你每次给出答案你就变一次我真的是怕了哦我给出的答案在你给我的系统都是能完成的我都测试过了的



http://www.msfans.net/bbs/
2005-3-16 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 13 楼』:  

我真是怕了你了我每次给出答案你就更改数据!我是真怕了你!但是我每次给出的答案都是对的!我都经过测试的!



http://www.msfans.net/bbs/
2005-3-16 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 14 楼』:  



  Quote:
以下是引用broodwu在2005-3-16 15:26:43的发言:

还是不行啊,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

其实要得到这样的数据也不是很难!只是我现在不想再写了!等下你又变了我是等于白写



http://www.msfans.net/bbs/
2005-3-16 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
broodwu
初级用户




积分 185
发帖 23
注册 2005-2-27
状态 离线
『第 15 楼』:  

@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
这样就可以达到要求了

2005-3-16 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: