中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-05 18:37
48,039 主题排行 / 350,124 发帖 / 今日 2 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » 急!过滤或删除文本中不必要的字符,并重新排列1.
可打印版本  892 / 5
第1楼 wwmy1982 发表于 2007-09-14 15:18
初级用户 发帖 11 积分 29
急!过滤或删除文本中不必要的字符,并重新排列1.
设1.txt内容如下:
PPC000 PPC000 WSW020 ESE010
PSE020 PSE020 PNW020 PPN020
PSE010 PNE010 PPW040 PPC000
PPC000 ENE010 PPW020 PPC000
PPE010 PPC000 PPC000 PPC000
ESE010 PPC000 PSW040 PPC000
PPC000 PPC000 PSW020 WSW010
PPC000 PPN010 PSW020 PPC000
////// PPC000 PPW020 PSE020
NNE010 PPC000 SSW010 PPC000
PPC000 PPC000 WSW020 NNE010
PPC000 PPC000 SSW020 PPC000
PSE010 PPC000 PPW040 PPC000
PPC000 PPC000 PSW020 PPC000
PPC000 PPC000 WNW010 PPC000
PPC000 ESE010 WNW010 PPC000
PSE010 PPC000 PPW030 PPC000
PPC000 PPC000 PPS010 PPC000
PPC000 PPC000 PSW030 PPC000
PPC000 PPC000 WSW010 PPC000
ENE010 PPC000 PSE030 PPE020
PNW020 PPC000 WSW010 PPC000
PPE010 PPC000 WSW050 PNW010
PSE010 PPC000 PPC000 PPC000
PPC000 PPC000 PPW010 PPC000
PPC000 PPC000 PPW010 PPS010
PSE010 PPC000 PPW010 PPC000
PPC000 PSE010 PPW030 PPN060
PPN030 PPC000 PSW040 PPC000
PPC000 PPW020 PSW040 PPC000
PPC000 PPC000 PPW050 NNW040
要求经操作后达到:将每行中含有的字符串“p"或 "pp" 的字符串过滤掉或删掉。并将每个字符串的数字保留一位小数。要达到如下效果,例如:ppc000 变成 c 0.0   PSE010变成 SE 1.0  NNW040变成 NNW 4.0
经过上述操作后,排序为:将每一行竖排:例如将第一行(其他行类推)排列为:
C 0.0
C 0.0
WSW 2.0
ESE 1.0
第2楼 wudixin96 发表于 2007-09-14 15:59
银牌会员 发帖 931 积分 1,928
sed "s/ /\n/g;s/[pP]\{1,2\}//g;s/[0-9]\([0-9]\)\([0-9]\)/ \1\.\2/g;" 1.txt>>2.txt

下个DOS版的sed,即可
第3楼 wwmy1982 发表于 2007-09-14 16:46
初级用户 发帖 11 积分 29
多谢wudixin96了。只是对sed不了解其用法。部分问题解决了,怎样将其第4个一列,进行竖排
C 0.0      SE 2.0  ...
C 0.0      SE 2.0  ...
WSW 2.0    W 2.0  ...
ESE 1.0     N 2.0  ...
 我在单位上等着用这些数据呢,请wudixin96兄答复,不胜感激!
第4楼 terse 发表于 2007-09-14 19:27
银牌会员 发帖 946 积分 2,404
假使数据没特别的地方 批处理也可以试试
@echo off&setlocal ENABLEDELAYEDEXPANSION
cd.>test2.txt
for /f "delims=" %%i in (test.txt) do for %%a in (%%i) do (
set str=%%a
set str=!str:p=!
set str=!str:0= !
echo !str!>>test
)
for /f "tokens=1,2 delims= " %%a in (test) do (
if not "%%b"=="" (echo %%a %%b.0 >>test2.txt) ELSE (echo %%a 0.0>>test2.txt)
)
del test
PAUSE
第5楼 digger 发表于 2007-09-14 21:48
初级用户 发帖 29 积分 79 来自 湖南
修改一下4楼的代码:

看走眼了,原来是要把040变成4.0而不是0.4,再修改一下。

[ Last edited by digger on 2007-9-15 at 06:03 PM ]
第6楼 terse 发表于 2007-09-15 12:48
银牌会员 发帖 946 积分 2,404
Originally posted by terse at 2007-9-14 19:27:
假使数据没特别的地方 批处理也可以试试
@echo off&setlocal ENABLEDELAYEDEXPANSION
cd.>test2.txt
for /f "delims=" %%i in (test.txt) do for %%a in (%%i) do (
...

你这样处理的话 NNW040 就变成 NNW 0.4 而不是想要的 NNW 4.0
而我上面写的也是 如果是 NNW400 就变为NNW4 0.0
所以参照一下:
@echo off&setlocal ENABLEDELAYEDEXPANSION
cd.>test2.txt
for /f "delims=" %%i in (test.txt) do for %%a in (%%i) do (
set str=%%a
set str=!str:p=!
set str=!str:~0,-3! !str:~-3,3!
set str=!str:0=!
echo !str!>>test
)
for /f "tokens=1,2 delims= " %%a in (test) do (
set str=%%a
if not "%%b"=="" (echo %%a %%b.0 >>test2.txt) ELSE (echo %%a 0.0>>test2.txt)
)
del test
PAUSE

[ Last edited by terse on 2007-9-15 at 01:04 PM ]
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023