中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]高手新手都进来看看,高难度的for筛选
作者:
标题: [求助]高手新手都进来看看,高难度的for筛选 上一主题 | 下一主题
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
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复

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


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



论坛跳转: