![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-15 13:10 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,268 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 求助-从一txt文档中提取email地址 |
| 可打印版本 7,691 / 32 |
| 第16楼 namejm | 发表于 2006-09-26 08:35 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
Originally posted by pip at 2006-9-25 21:30: pip这段代码简洁明了,代码最少,用%~x来去掉引号,出人意料,强啊。 |
|
| 第17楼 pengfei | 发表于 2006-09-26 09:08 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
Originally posted by uime at 2006-9-26 04:50: 是啊, pip兄一个环境变量扩充省了不少事, 厉害. 其实提取用户名和E-mail很容易, 难就是将他们匹配在一起. 我利用了FOR语句的循环规律, 用计数的方式实现用户名和E-mail的配对. |
|
| 第18楼 NaturalJ0 | 发表于 2006-09-26 09:55 |
| 银牌会员 发帖 533 积分 1,181 | |
|
我靠,我写了个批处理,虽然能把名字和EMAIL放一行一起搞出来,可居然要运行1分多钟。彻底失败了。 = =b
|
|
| 第19楼 namejm | 发表于 2006-09-26 10:08 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
呵呵,成功提取到姓名和对应的email,速度还不错,请大家测试(如果记录有重复,则只显示其中的一条记录):
[ Last edited by namejm on 2006-9-26 at 22:34 ] |
|
| 第20楼 vkill | 发表于 2006-09-26 10:13 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
其实在 .html 文件里面提取东西很难的,主要是这些 < > 等等
|
|
| 第21楼 pengfei | 发表于 2006-09-26 10:23 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
namejm兄行啊, 代码执行这么快想吓死我呀...
呵呵~ [ Last edited by pengfei on 2006-9-26 at 10:24 ] |
|
| 第22楼 pengfei | 发表于 2006-09-26 21:23 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
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毫秒, 呵呵~ 秒微比你的快一点点. |
|
| 第23楼 namejm | 发表于 2006-09-26 22:32 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
在我『第 19 楼』代码的基础上,实现了文本排版,可以测试一下效果:
|
|
| 第24楼 pengfei | 发表于 2006-09-27 02:17 |
| 银牌会员 发帖 485 积分 1,218 来自 湖南.娄底 | |
|
兄弟的排版速度很快, 支持! 再次利用了用户名的字符数规律实现了快速排版, 但也有局限性, 如用户名小于等于三个英文字母时, 排版会出现问题. 以兄的水平应该可以解决它.
我也发一段排版的代码, 一个不同的思路. 想了好久, 搞得我头晕. 整段代码的执行时间大约为: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 |
|
| 第25楼 amao | 发表于 2007-02-02 23:07 |
| 中级用户 发帖 152 积分 316 | |
|
sed "/@/!d;s/.*=\(*\) .*/\1/;/\x22/s/\x22//" email.txt
[ Last edited by amao on 2007-2-6 at 06:38 PM ] |
|
| 第26楼 anqing | 发表于 2007-02-02 23:29 |
| 高级用户 发帖 413 积分 859 | |
|
真厉害
|
|
| 第27楼 zencome | 发表于 2007-02-03 02:41 |
| 初级用户 发帖 47 积分 102 | |
|
不知道各位大侠可是科班出身?我等菜鸟可是难以的学会的了。
|
|
| 第28楼 namejm | 发表于 2007-02-03 05:02 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
Originally posted by zencome at 2007-2-2 13:41: 非也非也,我的专业和电脑相隔十万八千里,本人是半路出家,所以你大可不必自卑。 |
|
| 第29楼 ccwan | 发表于 2007-02-03 05:17 |
| 金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊 | |
|
联盟的牛很多啊
|
|
| 第30楼 dj0733 | 发表于 2007-02-03 06:37 |
| 初级用户 发帖 55 积分 138 | |
|
NB 呵呵.PFPF
|
|
| 上一页 1 2 3 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |