中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求助-从一txt文档中提取email地址
« [1] [2] [3] »
作者:
标题: 求助-从一txt文档中提取email地址 上一主题 | 下一主题
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
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
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
状态 离线
『第 26 楼』:  

真厉害

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
状态 离线
『第 30 楼』:  

NB 呵呵.PFPF

2007-2-3 06:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: