Board logo

标题: [求助]高手新手都进来看看,高难度的for筛选 [打印本页]

作者: terrytong     时间: 2008-9-27 11:18    标题: [求助]高手新手都进来看看,高难度的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)

作者: pusofalse     时间: 2008-9-27 11:39
有什么不一样吗?或者把空格换成跳格?最好上传附件,格式不会丢弃。
另、对for已经入门的,如此不会是高难度。

[ Last edited by pusofalse on 2008-9-27 at 11:44 ]
作者: terrytong     时间: 2008-9-27 11:58
结果像这个符件。
附件 1: restult.txt (2008-9-27 11:58, 1.11 K,下载次数: 16)

作者: pusofalse     时间: 2008-9-27 12:29
这题好麻烦,全角+半角混合~OMG 快成体力活了~
作者: pusofalse     时间: 2008-9-27 13:09
果真成了体力活。我的这种方法不兼容等号=,所以用了wfr.exe把里面的=全部先替换为#,最后再改回来。
CODE:  [Copy to clipboard]
@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 ]
作者: terrytong     时间: 2008-9-27 13:31
5楼的工具很好用,谢谢。
如果能不借用工具就更好了。我还没有想出好办法。^-^

作者: netbenton     时间: 2009-3-1 08:54
@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




欢迎光临 中国DOS联盟论坛 (http://cndos.fam.cx/forum/) Powered by Discuz! 2.5