中国DOS联盟论坛

中国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:
for /f "tokens=2 delims== " %x in ('findstr "@" email.txt') do echo %~x

  pip这段代码简洁明了,代码最少,用%~x来去掉引号,出人意料,强啊。
第17楼 pengfei 发表于 2006-09-26 09:08
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
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的配对.
第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