|
namejm
荣誉版主
batch fan
积分 5226
发帖 1737
注册 2006-3-10 来自 成都
状态 离线
|
『第
16 楼』:
Quote: | Originally posted by pip at 2006-9-25 21:30:
for /f "tokens=2 delims== " %x in ('findstr "@" email.txt') do echo %~x |
|
pip这段代码简洁明了,代码最少,用%~x来去掉引号,出人意料,强啊。
|
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。 |
|
2006-9-26 08:35 |
|
|
pengfei
银牌会员
积分 1218
发帖 485
注册 2006-7-21 来自 湖南.娄底
状态 离线
|
『第
17 楼』:
Quote: | Originally posted by uime at 2006-9-26 04:50:
真的不错,谢谢大家的热心,虽然执行了,但是对for语句还是有点模糊
[ Last edited by uime on 2006-9-26 at 05:14 ] |
|
是啊, pip兄一个环境变量扩充省了不少事, 厉害.
其实提取用户名和E-mail很容易, 难就是将他们匹配在一起. 我利用了FOR语句的循环规律, 用计数的方式实现用户名和E-mail的配对.
|
|
2006-9-26 09:08 |
|
|
NaturalJ0
银牌会员
积分 1181
发帖 533
注册 2006-8-14
状态 离线
|
『第
18 楼』:
我靠,我写了个批处理,虽然能把名字和EMAIL放一行一起搞出来,可居然要运行1分多钟。彻底失败了。 = =b
|
|
2006-9-26 09:55 |
|
|
namejm
荣誉版主
batch fan
积分 5226
发帖 1737
注册 2006-3-10 来自 成都
状态 离线
|
『第
19 楼』:
呵呵,成功提取到姓名和对应的email,速度还不错,请大家测试(如果记录有重复,则只显示其中的一条记录):
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('findstr "width=86 @" email.txt') do (
set first=!second!
set second=%%i
if "!first:~51,5!"=="value" set name=!first:~57,-1!
if "!second:~0,5!"=="value" (
set var=!second:~6,-18!
set "var=!var:"=!"
set "var=!var: =!"
set var=!name! !var!
)
if not "!var!"=="!str!" echo !var!^|find "@">nul && echo !var! & set str=!var!
)
pause [ Last edited by namejm on 2006-9-26 at 22:34 ]
|
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。 |
|
2006-9-26 10:08 |
|
|
vkill
金牌会员
积分 4103
发帖 1744
注册 2006-1-20 来自 甘肃.临泽
状态 离线
|
『第
20 楼』:
其实在 .html 文件里面提取东西很难的,主要是这些 < > 等等
|
|
2006-9-26 10:13 |
|
|
pengfei
银牌会员
积分 1218
发帖 485
注册 2006-7-21 来自 湖南.娄底
状态 离线
|
『第
21 楼』:
namejm兄行啊, 代码执行这么快想吓死我呀...
呵呵~
[ Last edited by pengfei on 2006-9-26 at 10:24 ]
|
|
2006-9-26 10:23 |
|
|
pengfei
银牌会员
积分 1218
发帖 485
注册 2006-7-21 来自 湖南.娄底
状态 离线
|
『第
22 楼』:
namejm兄19楼的代码采用了取字符方法提取, 可见兄在查找规律上下了不少功夫. 思路独到. 佩服!
我也发段速度还过得去的代码, 可以提取到非有效的E-mail地址. 但如果网页中的E-mail一栏没有任何内容将跳过不作处理.
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('findstr /c:"WIDTH: 80px" /c:uemail email.txt') do (
set /a num+=1
set /a term=!num!%%2
if "!term!"=="1" (
for /f "tokens=5 delims==" %%1 in ("%%i") do (
if not "%%1"=="uname></TD>" set mail=%%~1
)
) else (
for /f "tokens=2 delims== " %%2 in ("%%i") do (
if not "%%2"=="width" (
echo !mail! %%~2>>name_mail.txt
)
)
)
)
pause
经过在无任何程序干扰的情况下测试, 整段代码的执行时间为9-11毫秒(如果CPU处理频率不同可能有偏差).
19楼namejm兄代码的执行时间为11-12毫秒, 呵呵~ 秒微比你的快一点点.
|
|
2006-9-26 21:23 |
|
|
namejm
荣誉版主
batch fan
积分 5226
发帖 1737
注册 2006-3-10 来自 成都
状态 离线
|
『第
23 楼』:
在我『第 19 楼』代码的基础上,实现了文本排版,可以测试一下效果:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('findstr "width=86 @" email.txt') do (
set first=!second!
set second=%%i
if "!first:~51,5!"=="value" (
set name=!first:~57,-1!
if "!name:~2,1!"=="" (set name=!name!
) else (
if "!name:~3,1!"=="" (set name=!name!
) else (
set name=!name!
set name=!name:~0,9!
)
)
)
if "!second:~0,5!"=="value" (
set var=!second:~6,-18!
set "var=!var:"=!"
set "var=!var: =!"
set var=!name! !var!
)
if not "!var!"=="!str!" echo !var!^|find "@">nul && echo !var! & set str=!var!
)
pause
|
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。 |
|
2006-9-26 22:32 |
|
|
pengfei
银牌会员
积分 1218
发帖 485
注册 2006-7-21 来自 湖南.娄底
状态 离线
|
『第
24 楼』:
兄弟的排版速度很快, 支持! 再次利用了用户名的字符数规律实现了快速排版, 但也有局限性, 如用户名小于等于三个英文字母时, 排版会出现问题. 以兄的水平应该可以解决它.
我也发一段排版的代码, 一个不同的思路. 想了好久, 搞得我头晕. 整段代码的执行时间大约为:1秒钟多十几毫秒. 速度和namejm兄的代码没得比, 但没有局限性.
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('findstr /c:"WIDTH: 80px" /c:uemail email.txt') do (
set /a num+=1
set /a term=!num!%%2
if "!term!"=="1" (
for /f "tokens=5 delims==" %%1 in ("%%i") do (
if not "%%1"=="uname></TD>" set mail=%%~1
)
) else (
for /f "tokens=2 delims== " %%2 in ("%%i") do (
if not "%%2"=="width" (
set count=!mail!
call :one
echo !mail! %%~2>>name_mail.txt
)
)
)
)
pause
:one
set remove=
if not "!count:~0,1!"=="~" (
for %%1 in (a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9) do (
if /i "!count:~0,1!"=="%%1" (
set /a nem=!nem!+1
set remove=1
)
)
if "!remove!"=="" set /a nem+=2
set count=!count:~1!
goto :one
)
:two
if !nem! LSS 15 (
set /a nem+=1
set mail=!mail!
goto :two
)
set nem=
goto :eof
|
|
2006-9-27 02:17 |
|
|
amao
中级用户
积分 316
发帖 152
注册 2006-6-18
状态 离线
|
『第
25 楼』:
sed "/@/!d;s/.*=\([^ ]*\) .*/\1/;/\x22/s/\x22//" email.txt
[ Last edited by amao on 2007-2-6 at 06:38 PM ]
|
|
2007-2-2 23:07 |
|
|
anqing
高级用户
积分 859
发帖 413
注册 2006-8-14
状态 离线
|
|
2007-2-2 23:29 |
|
|
zencome
初级用户
积分 102
发帖 47
注册 2007-1-14
状态 离线
|
『第
27 楼』:
不知道各位大侠可是科班出身?我等菜鸟可是难以的学会的了。
|
|
2007-2-3 02:41 |
|
|
namejm
荣誉版主
batch fan
积分 5226
发帖 1737
注册 2006-3-10 来自 成都
状态 离线
|
『第
28 楼』:
Quote: | Originally posted by zencome at 2007-2-2 13:41:
不知道各位大侠可是科班出身?我等菜鸟可是难以的学会的了。 |
|
非也非也,我的专业和电脑相隔十万八千里,本人是半路出家,所以你大可不必自卑。
|
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。 |
|
2007-2-3 05:02 |
|
|
ccwan
金牌会员
积分 2725
发帖 1160
注册 2006-9-23 来自 河北廊坊
状态 离线
|
『第
29 楼』:
联盟的牛很多啊
|
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。 |
|
2007-2-3 05:17 |
|
|
dj0733
初级用户
积分 138
发帖 55
注册 2007-2-2
状态 离线
|
|
2007-2-3 06:37 |
|