标题: 急!过滤或删除文本中不必要的字符,并重新排列1.
[打印本页]
作者: wwmy1982
时间: 2007-9-14 15:18
标题: 急!过滤或删除文本中不必要的字符,并重新排列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
作者: wudixin96
时间: 2007-9-14 15:59
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,即可
作者: wwmy1982
时间: 2007-9-14 16:46
多谢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兄答复,不胜感激!
作者: terse
时间: 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 (
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
作者: digger
时间: 2007-9-14 21:48
修改一下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 ]
作者: terse
时间: 2007-9-15 12:48
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 ]