中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 急!过滤或删除文本中不必要的字符,并重新排列1.
作者:
标题: 急!过滤或删除文本中不必要的字符,并重新排列1. 上一主题 | 下一主题
wwmy1982
初级用户





积分 29
发帖 11
注册 2006-10-22
状态 离线
『楼 主』:  急!过滤或删除文本中不必要的字符,并重新排列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

2007-9-14 15:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 2 楼』:  

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,即可

2007-9-14 15:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wwmy1982
初级用户





积分 29
发帖 11
注册 2006-10-22
状态 离线
『第 3 楼』:  

多谢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兄答复,不胜感激!

2007-9-14 16:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 4 楼』:  

假使数据没特别的地方  批处理也可以试试
@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

2007-9-14 19:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
digger
初级用户

游荡的孤魂



积分 79
发帖 29
注册 2007-4-2
来自 湖南
状态 离线
『第 5 楼』:  

修改一下4楼的代码:
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in (test.txt) do (
    for %%j in (%%i) do (
        set str=%%j
        set str=!str:p=!
        set str=!str:~0,-3! !str:~-2,1!.!str:~-1!
        echo !str!
    )
)
pause
看走眼了,原来是要把040变成4.0而不是0.4,再修改一下。

[ Last edited by digger on 2007-9-15 at 06:03 PM ]

   此帖被 +1 点积分    点击查看详情   
评分人:【 leo1984 分数: +1  时间:2007-10-31 03:04


2007-9-14 21:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 6 楼』:  



  Quote:
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 ]

2007-9-15 12:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: