返回列表 发帖

没考虑太多代码效率等其它因素,发个先,后面再改进吧

@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('findstr "</td>" a.txt') do (
    set/a n+=1
    set str!n!=%%i
)
echo 被评分者 评分时间 积分变动 评分理由>b.txt
for /l %%i in (6,1,%n%) do (
    set/a num+=1
    set/a s=%%i%%5
    if !s! equ 1 (
       for /f "tokens=4 delims=<>" %%j in ("!str%%i!") do set/p=%%j  <nul>>b.txt)
    if !s! equ 3 (
       for /f "tokens=7 delims=<>" %%k in ("!str%%i!") do set/p=%%k  <nul>>b.txt)
    if !s! equ 4 (
       for /f "tokens=5 delims=<>" %%l in ("!str%%i!") do set/p=%%l  <nul>>b.txt)
    if !s! equ 0 (
       for /f "tokens=3 delims=<>" %%m in ("!str%%i!") do echo %%m>>b.txt)
)
pauseCOPY

[ 本帖最后由 pumahxh 于 2009-12-11 20:41 编辑 ]
1

评分人数

TOP

谢谢楼主出的好题

楼主的题目非常好,在实际工作中很有借鉴意义,希望高手暂缓出手,等我们写完了,你们再指点,给出更好的解法。谢谢大家!

TOP

按要求改进后的,感觉代码比较繁琐,请LZ指导

@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('findstr /i "</td> <b><a" a.txt') do (
    set/a n+=1
    set str!n!=%%i
)
for /l %%i in (1,1,5) do (
    for /f "tokens=3 delims=<>" %%j in ("!str%%i!") do set "T=%%j"&set "T=!T:/=   !"
    set/p=!T! <nul>>b.txt   
)
echo.>>b.txt
for /l %%i in (6,1,%n%) do (
    set/a s=%%i%%6
    if !s! equ 0 (
       for /f "tokens=4 delims=<>" %%j in ("!str%%i!") do set/p=%%j  <nul>>b.txt)
    if !s! equ 1 (
       for /f "tokens=8 delims== " %%k in ("!str%%i!") do set/p=http://bbs.bathome.net/%%~k  <nul>>b.txt)
    if !s! equ 3 (
       for /f "tokens=4,7 delims=<>" %%l in ("!str%%i!") do (
                 set/p=%%l  <nul>>b.txt
                 set dt=%%m
                 set dt=!dt: =-!
                 set/p=!dt!  <nul>>b.txt))
    if !s! equ 4 (
       for /f "tokens=3,5 delims=<>" %%m in ("!str%%i!") do (
                 set pb=%%m
                 set pb=!pb: =!
                 set/p=!pb!%%n  <nul>>b.txt))
    if !s! equ 5 (
       for /f "tokens=3 delims=<>" %%n in ("!str%%i!") do echo %%n>>b.txt)
)
pauseCOPY

TOP

原帖由 batman 于 2009-12-12 20:40 发表
做点小小的提示:

    1、充分利用findstr的正则来解题。

    2、尽量采用一次性读取和输出以提高效率,即读取和输出同时进行。

    3、在获取链接地址时注意处理引号技巧的运用。

请问LZ,你提到的提示第2点:读出和输出同时进行,是什么意思?是读出a.txt的信息时,同时输出b.txt吗?在一个for语句中进行?
在获取链接地址时,我用"delims=""或"delims="""都得不到地址,最后用"delims= "才得到,特别是用"delims=""还报错!
用一个for一边读取一边输出,我改了下代码,不知是不是这样,但在程序开头和结尾加echo %time%来测算时间,和我前一种方法时间看不出差别。
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('findstr /i "</td> <b><a" a.txt') do (
    set/a n+=1
    if !n! lss 6 (
           for /f "tokens=3 delims=<>" %%j in ("%%i") do set "T=%%j"&set "T=!T:/=   !"
           set/p=!T! <nul>>b.txt   
           if !n! equ 5 echo.>>b.txt) else (
    set/a s=!n!%%6
    if !s! equ 0 (
       for /f "tokens=4 delims=<>" %%j in ("%%i!") do set/p=%%j  <nul>>b.txt)
    if !s! equ 1 (
       for /f "tokens=8 delims== " %%k in ("%%i!") do set/p=http://bbs.bathome.net/%%~k  <nul>>b.txt)
    if !s! equ 3 (
       for /f "tokens=4,7 delims=<>" %%l in ("%%i!") do (
                 set/p=%%l  <nul>>b.txt
                 set dt=%%m
                 set dt=!dt: =-!
                 set/p=!dt!  <nul>>b.txt))
    if !s! equ 4 (
       for /f "tokens=3,5 delims=<>" %%m in ("%%i!") do (
                 set pb=%%m
                 set pb=!pb: =!
                 set/p=!pb!%%n  <nul>>b.txt))
    if !s! equ 5 (
       for /f "tokens=3 delims=<>" %%n in ("%%i!") do echo %%n>>b.txt)
                 )
)
pauseCOPY

[ 本帖最后由 pumahxh 于 2009-12-12 23:24 编辑 ]
1

评分人数

    • batman: good,但代码还可简化。PB + 15

TOP

返回列表