标题: [文件操作] 批处理怎样把文本内特定数据提取到新的文本? [打印本页]
作者: cgwang 时间: 2014-12-25 16:58 标题: 批处理怎样把文本内特定数据提取到新的文本?
如何将下列数据里Start-Line下面em592、1|Db前后两个数、|dz后数提出到新的文本
For M5|Adr 1|TO 20141220.dat | | | |
For M5|Adr 2|TO Start-Line aBFFB 1| | | |
For M5|Adr 3|KD1 EM592 1| | |Z 0.00000 m |
For M5|Adr 14|KD1 2 1|Sh 0.07105 m |dz -0.07105 m |Z 0.00000 m |
For M5|Adr 15|KD2 2 2 1|Db 13.94 m |Df 14.51 m |Z 0.07105 m |
For M5|Adr 16|TO End-Line 1| | | |
For M5|Adr 1|TO 20141220.dat | | | |
For M5|Adr 2|TO Start-Line aBFFB 1| | | |
For M5|Adr 3|KD1 EM591 1| | |Z 0.00000 m |
For M5|Adr 44|KD1 8 1|Sh 0.03500 m |dz -0.03500 m |Z 0.00000 m |
For M5|Adr 45|KD2 8 8 1|Db 343.70 m |Df 345.29 m |Z 0.03500 m |
For M5|Adr 46|TO End-Line 1| | | |
For M5|Adr 1|TO 20141220.dat | | | |
For M5|Adr 2|TO Start-Line aBFFB 1| | | |
For M5|Adr 3|KD1 EM587 1| | |Z 0.00000 m |
For M5|Adr 55|KD2 10 10 1|Db 448.12 m |Df 448.74 m |Z -0.03286 m |
For M5|Adr 56|TO End-Line 1| | | |
提取到新文本,格式为为
EM592 2 13.94 -0.07105
EM591 8 343.70 -0.03500
EM587 10 448.12 -0.03286
第三列取 1|Db和|Df 后数据大的那个
由于我对数据理解错误,第三列应该提取的是|Df 前后两个距离之和,而不是两个的最大值。
作者: terse 时间: 2014-12-25 23:33
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in (a.dat) do (
- set "str=%%i"
- if defined Line (
- for /f %%a in ("!str:*|KD1=!") do set "s1=%%a"
- set "Line="
- )
- if "!str:*|Db =!" neq "!str!" (
- for /f "tokens=1-2" %%a in ("!str:*|KD2 =!") do set "s2=%%b"
- for /f %%a in ("!str:*|Db =!") do set "s3=%%a"
- for /f %%a in ("!str:*|Df =!") do (
- for /f "tokens=1-2 delims=." %%A in ("!s3!") do (
- for /f "tokens=1-2 delims=." %%C in ("%%a") do (
- if %%A equ %%C (
- if 1%%B lss 1%%D set "s3=%%a"
- ) else if %%A lss %%C set "s3=%%a"
- )
- )
- )
- for /f %%a in ("!str:*|Z =!") do set "s4=%%a"
- )
- if defined s4 (
- echo !s1! !s2! !s3! !s4!
- set s4=
- )
- if "!str: Start-Line =!" neq "!str!" set "Line=0"
- )
- pause
复制代码
作者: ads350668398 时间: 2014-12-26 06:42
本帖最后由 ads350668398 于 2014-12-26 06:48 编辑
怎么我的问题 都很少有人文景 怎么复杂的事情 有人怎么积极#@4
作者: cgwang 时间: 2014-12-26 09:28
提取出来了,可是怎么在dos里面,我想让它提取到一个新的文件里面,该怎么修改呢,大侠
作者: DAIC 时间: 2014-12-26 11:19
回复 4# cgwang - @echo off&setlocal enabledelayedexpansion
- (for /f "delims=" %%i in (a.dat) do (
- set "str=%%i"
- if defined Line (
- for /f %%a in ("!str:*|KD1=!") do set "s1=%%a"
- set "Line="
- )
- if "!str:*|Db =!" neq "!str!" (
- for /f "tokens=1-2" %%a in ("!str:*|KD2 =!") do set "s2=%%b"
- for /f %%a in ("!str:*|Db =!") do set "s3=%%a"
- for /f %%a in ("!str:*|Df =!") do (
- for /f "tokens=1-2 delims=." %%A in ("!s3!") do (
- for /f "tokens=1-2 delims=." %%C in ("%%a") do (
- if %%A equ %%C (
- if 1%%B lss 1%%D set "s3=%%a"
- ) else if %%A lss %%C set "s3=%%a"
- )
- )
- )
- for /f %%a in ("!str:*|Z =!") do set "s4=%%a"
- )
- if defined s4 (
- echo !s1! !s2! !s3! !s4!
- set s4=
- )
- if "!str: Start-Line =!" neq "!str!" set "Line=0"
- ))>新的文本.txt
复制代码
作者: DAIC 时间: 2014-12-26 11:20
回复 3# ads350668398
可以考虑一下是不是自己提问的方式有待改善
作者: cgwang 时间: 2014-12-26 12:49
谢谢 terse 和DAIC的帮助,问题解决了。以后我会注意提问方式的
作者: cgwang 时间: 2014-12-26 13:30
回复 7# cgwang
由于我对数据理解错误,第三列应该提取的是|Df 前后两个距离之和,而不是两个的最大值,看来文化知识少就是很可怕呀
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |