&&看来此题对于普通会员来说具有一定的难度,下面给出本人的全解,并稍做说明,代码如下:- @echo off&setlocal enabledelayedexpansion
- (for /f "delims=" %%a in ('findstr /r "<b>< <td.*d>$" a.txt') do (
- set /a n+=1&if !n! equ 6 set /a n=1,m=0&echo.
- if not defined m (
- for /f "tokens=3,4 delims=/<>" %%b in ("%%a") do set /p=%%b <nul&if !n! equ 3 set /p=%%c <nul
- ) else (
- if !n! equ 1 for /f "tokens=4 delims=<>" %%b in ("%%a") do set /p=%%b <nul
- if !n! equ 2 for /f "tokens=8 delims== " %%b in ("%%a") do set /p=http://bbs.bathome.net/%%~b <nul
- if !n! equ 3 for /f "tokens=8,12,13 delims=<> " %%b in ("%%a") do set /p=%%b %%c-%%d <nul
- if !n! equ 4 for /f "tokens=4,7 delims=<> " %%b in ("%%a") do set /p=%%b%%c <nul
- if !n! equ 5 for /f "tokens=3 delims=<>" %%b in ("%%a") do set /p=%%b <nul
- )
- ))>b.txt
- start b.txt
复制代码 说明:
首先讲讲findstr正则的运用,大家都明白代码中运用findstr是为了最大限度地从a.txt中剔除无用信息行而提取有用信息行,所以
代码中使用了findstr /r "<b>< <td.*d>$" a.txt,之所以使用/r参数是为了让findstr识别后面的<td.*d>$表达式而不是全做为字符来处理
其中的$表示行尾,使用<b><的表达式的意思大家都知道我就不说明了,使用<td.*d>$表达式就可以提取所有含有<td字符并从中剔
除只以<td>结尾的行。
接下来讲下代码中for /f "tokens=* delims=*"的运用,使用findstr正则提取了有用信息行后,接下来我们还要从每行中剔除无用
的信息,而保留输出想要的信息,一般来说可以采用两种办法,一种是字符截取,但因为文本中的字符数是在变化的,所以此法不
可用,那么我们就要利用好for /f中的tokens和delims参数了,先选取合适的足够的分隔符来将每行分成n列,注意在分隔时不要将
我们想要获取的字符部分分开了,同时尽量取特殊字符为分隔符而不要取常用的数字和字母,最后取我们所需要的列并输出就可以
了。
看了13楼的长变量法(将每五行存入一个变量),我也尝试过用此法来解析出全信息,但实际上处理起来相当麻烦,希望有高人
能给出此法的精彩代码。 |