|
terrytong
中级用户
积分 240
发帖 115
注册 2008-3-10
状态 离线
|
『楼 主』:
[求助]高手新手都进来看看,高难度的for筛选
我有个test.txt,里面内容:
1 010283 --- 0.627 2.271 0.016 === 0.6217 1.75% 工程师 历史表现
2 009730 中国 0.8954 2.1154 0.0202 2.31% 0.8885 1.52% 采购员 历史表现 论
3 008655 --- 2.287 2.407 --- 2.28% 2.2754 1.76% 工程师 历史表现
9 014743 === 0.627 2.271 0.016 --- 0.6217 1.75% 采购员 历史表现
10 010282 烟酒经销商 0.8954 --- --- --- 0.8885 1.52% 采购员 历史表现
14 008652 奥大利亚 0.88 2.05 === 2.21% 0.8754 1.67% 工程师 历史表现
15 14600 英格闫 --- 2.271 0.016 2.62% --- 1.75% 工程师 历史表现
16 111100 服务员 0.8954 2.1154 0.0202 2.31% 0.8885 1.52% 工程师 历史表现
99 010288 面包店老板 2.287 2.407 0.051 === 2.2754 1.76% --- 采购员 历史表现
100 161604 上网 0.88 2.05 0.019 2.21% 0.8754 1.67% 采购员 ---
101 583622 女友001 0.627 2.271 0.016 2.62% 0.6217 1.75% --- 历史表现
102 142520 部分 0.8954 2.1154 0.0202 2.31% 0.8885 1.52% 采购员 历史表现
103 159901 谢谢 2.287 2.407 0.051 2.28% 2.2754 1.76% 采购员 历史表现
现在想把他重新排版:
1 010283 --- 0.627 2.271 0.016 === 0.6217 1.75% 工程师 历史表现
2 009730 中国 0.8954 2.1154 0.0202 2.31% 0.8885 1.52% 采购员 历史表现
3 008655 --- 2.287 2.407 --- 2.28% 2.2754 1.76% 工程师 历史表现
9 014743 === 0.627 2.271 0.016 --- 0.6217 1.75% 采购员 历史表现
10 010282 烟酒经销商 0.8954 --- --- --- 0.8885 1.52% 采购员 历史表现
14 008652 奥大利亚 0.88 2.05 === 2.21% 0.8754 1.67% 工程师 历史表现
15 14600 英格闫 --- 2.271 0.016 2.62% --- 1.75% 工程师 历史表现
16 111100 服务员 0.8954 2.1154 0.0202 2.31% 0.8885 1.52% 工程师 历史表现
99 010288 面包店老板 2.287 2.407 0.051 === 2.2754 1.76% --- 历史表现
100 161604 上网 0.88 2.05 0.019 2.21% 0.8754 1.67% 采购员 ---
101 583622 女友001 0.627 2.271 0.016 2.62% 0.6217 1.75% --- 历史表现
102 142520 部分 0.8954 2.1154 0.0202 2.31% 0.8885 1.52% 采购员 历史表现
103 159901 谢谢 2.287 2.407 0.051 2.28% 2.2754 1.76% 采购员 历史表现
由于这里面还有特殊字符要注意啊。
[ Last edited by terrytong on 2008-9-27 at 12:03 ]
附件
1: test.txt (2008-9-27 12:03, 981 bytes,下载次数: 9)
|
|
2008-9-27 11:18 |
|
|
pusofalse
银牌会员
积分 1604
发帖 646
注册 2008-4-13
状态 离线
|
『第
2 楼』:
有什么不一样吗?或者把空格换成跳格?最好上传附件,格式不会丢弃。
另、对for已经入门的,如此不会是高难度。
[ Last edited by pusofalse on 2008-9-27 at 11:44 ]
|
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^ |
|
2008-9-27 11:39 |
|
|
terrytong
中级用户
积分 240
发帖 115
注册 2008-3-10
状态 离线
|
『第
3 楼』:
结果像这个符件。
附件
1: restult.txt (2008-9-27 11:58, 1.11 K,下载次数: 16)
|
|
2008-9-27 11:58 |
|
|
pusofalse
银牌会员
积分 1604
发帖 646
注册 2008-4-13
状态 离线
|
『第
4 楼』:
这题好麻烦,全角+半角混合~OMG 快成体力活了~
|
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^ |
|
2008-9-27 12:29 |
|
|
pusofalse
银牌会员
积分 1604
发帖 646
注册 2008-4-13
状态 离线
|
『第
5 楼』:
果真成了体力活。我的这种方法不兼容等号=,所以用了wfr.exe把里面的=全部先替换为#,最后再改回来。
@echo off&setlocal enabledelayedexpansion
copy test.txt tmp.txt >nul
wfr tmp.txt /r:"\=" /t:"#"
set ".3=12"&set ".10=9"&set ".11=9"
for /f "delims=" %%a in (tmp.txt) do (
set/a n=0
for %%i in (%%a) do (
set/a n+=1,m=0&set "s="
for %%s in (3 10 11) do (
if !n! equ %%s (
set "s=s"&set "var=%%i"
call :lp "%%s" "%%i"
))
if not defined s if !n! neq 12 set "var=%%i "&set/p=!var:~,7! <nul
)
echo.
)>>a.txt
del tmp.txt
wfr a.txt /r:"#" /t:"\="
pause
:lp
set "str=%var:~,1%"&set "var=%var:~1%"
if "%str%" gtr "Z" (set/a m+=2) else set/a m+=1
if "%var%" neq "" goto lp
set/a x=.%~1-m
<nul set/p=%~2
for /l %%a in (1 1 %x%) do set/p= <nul 保存结果为a.txt
wfr.exe 下载:http://www.vkill.net/tools/wfr_2.3.1.120.rar
[ Last edited by pusofalse on 2008-9-27 at 13:20 ]
|
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^ |
|
2008-9-27 13:09 |
|
|
terrytong
中级用户
积分 240
发帖 115
注册 2008-3-10
状态 离线
|
『第
6 楼』:
5楼的工具很好用,谢谢。
如果能不借用工具就更好了。我还没有想出好办法。^-^
|
|
2008-9-27 13:31 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
『第
7 楼』:
@echo off&setlocal enabledelayedexpansion
::文本排版程序,根据字段长度来定宽度,而不是简单的用[TAB]
::难点在于取字段长度和特殊符号“=”号的处理上
set "sour=test.txt"& rem 源文件名
set "dest=restult.txt"&rem 处理结果存放文件名
cd.>!dest!
set/a #n=0&set/p= Waiting.<nul
for /f "tokens=1-11" %%a in (!sour!) do (
set/a #n+=1
set /p=.<nul
set #m=0&set nn=0
for /f "skip=1 delims=:" %%m in ('^(echo."%%a"^&echo."%%b"^&echo."%%c"^&echo."%%d"^&echo."%%e"^&echo."%%f"^&echo."%%g"^&echo."%%h"^&echo."%%i"^&echo."%%j"^&echo."%%k"^&echo.^)^|findstr /o ".*"') do (
set/a #m+=1&set/a _!#n!_!#m!=%%m-!nn!-5&set nn=%%m
call :sebig _!#n!_!#m! _nm!#m!
)
)
set/a #n=0
set/p=.<nul
set "space= "
for /f "tokens=1-11" %%a in (!sour!) do (
set/a #n+=1&set #m=0
set /p=.<nul
set _str=
for %%m in ("%%a","%%b","%%c","%%d","%%e","%%f","%%g","%%h","%%i","%%j","%%k") do (
set "_mm=%%~m"&set/a #m+=1&set /p "= !_mm!"<nul>>!dest!
call :gecho %%_!#n!_!#m!%% %%_nm!#m!%%
)
echo.>>!dest!
)
echo ok..&pause
goto :eof
:sebig
if !%1! geq !%2! (set %2=!%1!)
goto :eof
:gecho
set /p=!space:~-%2,-%1!<nul>>!dest!
goto :eof
|
精简
[你的+我的+他的]=>[大家的] 个人网志 |
|
2009-3-1 08:54 |
|