Board logo

标题: [文本处理] [已解决]批处理可以实现在gmail邮箱地址中随机加点吗? [打印本页]

作者: jonm158    时间: 2010-8-16 00:07     标题: [已解决]批处理可以实现在gmail邮箱地址中随机加点吗?

比如 :[email=l.ibinglibinglibing890@gmail.com]l.ibinglibinglibing890@gmail.com[/email]
            [email=li.binglibinglibing890@gmail.com]li.binglibinglibing890@gmail.com[/email]
            [email=libi.nglibinglibing890@gmail.com]libi.nglibinglibing890@gmail.com[/email]
            [email=libin.glibinglibing890@gmail.com]libin.glibinglibing890@gmail.com[/email]
            [email=libingli.binglibing890@gmail.com]libingli.binglibing890@gmail.com[/email]
            [email=libinglibin.glibing890@gmail.com]libinglibin.glibing890@gmail.com[/email]
            [email=libinglibinglib.ing890@gmail.com]libinglibinglib.ing890@gmail.com[/email]
可以在[email=libinglibinglibing890@gmail.com]libinglibinglibing890[/email]之间任意加点都是子地址。那位朋友帮忙写一下希望列出的子地址不会重复  谢谢
我用论坛里一个朋友写的,处理我这个,半天不动,请高手帮助

[ 本帖最后由 jonm158 于 2010-8-18 21:36 编辑 ]
作者: Batcher    时间: 2010-8-16 09:09

你用的哪个?能否贴出来看看?
作者: slk5090    时间: 2010-8-16 12:18

2楼没看懂,意思就是:我要告诉别人我的邮箱地址如:[email]libingli.binglibing890@gmail.com[/email],要怎样把这一行字加进批处理文件里去,请解答一下,象这样的事情很多的,如果能写,就方便多了。
作者: Batcher    时间: 2010-8-16 12:54

3楼没看懂,楼主说了:“我用论坛里一个朋友写的,处理我这个,半天不动”
作者: 523066680    时间: 2010-8-16 13:11     标题: 回复 1楼 的帖子

点的个数有限制吗?
没有限制就按顺序加呗 遇到@ 就结束
a.bcd
ab.cd
abc.d
这样子吗?
作者: jonm158    时间: 2010-8-16 19:23

点的个数没有限制,谢谢各位高手朋友
我用下面这个批处理试过,不动
  1. @echo off>nul 3>sub_name.txt
  2. setlocal enableDelayedExpansion
  3. set name=libinglibinglibing890
  4. :lp
  5. set/a nl+=1
  6. if not "!name:~%nl%!"=="" goto :lp
  7. set/a ml=nl-1
  8. call :showN name %ml%
  9. echo 名字%name%长度为%nl%,共有%num%个子地址。
  10. goto :eof
  11. :showN
  12. for /l %%a in (1 1 %2) do (
  13.  if not "!%1:~%%a,1!"=="." (
  14.   echo !%1:~,%%a!.!%1:~%%a!@gmail.com&set/anum+=1
  15.   set %11=!%1:~,%%a!.!%1:~%%a!
  16.   call :showN %11 %%a
  17.  )
  18. )
复制代码
请高手改进
作者: CUer    时间: 2010-8-16 23:02

  1. gawk -F@ "{n=length($1);for(i=1;i<=n;i++)print substr($1,1,i-1)substr($1,i,1)\".\"substr($1,i+1)\"@\"$2}" 1.txt
复制代码

作者: jonm158    时间: 2010-8-17 11:27

谢谢CUER的指导,
但这句代码怎么用还看懂
作者: jonm158    时间: 2010-8-17 11:29

请各位高手们再指导指导,谢谢
作者: 523066680    时间: 2010-8-17 11:36

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set str=abcd
  4. call :act "%str:~0,1%" "%str:~1%"
  5. :::call :func %StrChoose% %StrHave%
  6. pause
  7. exit
  8. :act
  9. setlocal
  10. set tmpstr=%~2
  11. if "%~2"=="" (
  12.    echo %~1
  13.    goto :eof
  14. )
  15. call :act "%~1.!tmpstr:~0,1!" "!tmpstr:~1!"
  16. call :act "%~1!tmpstr:~0,1!" "!tmpstr:~1!"
  17. endlocal
复制代码
测试的字符串是abcd,在其中间插入点
a.b.c.d
a.b.cd
a.bc.d
a.bcd
ab.c.d
ab.cd
abc.d
abcd
请按任意键继续. . .



我是利用组合,
每一个位置:存在与不存在点  的情况构成不同的组合,
4个字符之间有三个地方可插入点, 那么组合的个数就是 2的三次方=8

改掉字符串,试试吧
作者: 523066680    时间: 2010-8-17 11:41

libinglibinglibing890   
21个字符
=.= 我杯具了,你的那个地址的字符串的插入点的组合个数是:
2的20次方: 1048576
用递归的方法效率超低……

[ 本帖最后由 523066680 于 2010-8-18 17:32 编辑 ]
作者: Batcher    时间: 2010-8-17 11:53     标题: 回复 8楼 的帖子

下载gawk.exe
http://bbs.bathome.net/thread-3981-1-1.html
作者: 523066680    时间: 2010-8-17 12:04

那么,如果gawk 可以不重复地插入任意个点并枚举,代码也很短吗?
好奇啊。
作者: jonm158    时间: 2010-8-17 12:41

谢谢各位高手,我先去试试了
作者: jonm158    时间: 2010-8-17 12:50

管理说的那个工具,以下了,但还是不清楚怎么用,还是要请高手指导,谢谢大家
作者: CUer    时间: 2010-8-17 13:25

  1. libinglibinglibing890@gmail.com
复制代码
保存到1.txt里面
再运行gawk命令
作者: jonm158    时间: 2010-8-17 20:40

管理说的那个工具,以下了,但还是不清楚怎么用,还是要请高手指导,谢大家
作者: jonm158    时间: 2010-8-17 20:54

CUER,你好,
我先把这个做成批处理
gawk -F@ "{n=length($1);for(i=1;i<=n;i++)print substr($1,1,i-1)substr($1,i,1)\".\"substr($1,i+1)\"@\"$2}" 1.txt
再把[email]libinglibinglibing890@gmail.com[/email]保存到1.txt里面

放在同一文件夹里,运行上面的命令,就闪了一下,没有别的变化。
请再指点
作者: 529112036yk    时间: 2010-8-17 20:59

不管怎样先顶一下。。。。。
作者: CUer    时间: 2010-8-17 22:54

  1. gawk -F@ "{n=length($1);for(i=1;i<=n;i++)print substr($1,1,i-1)substr($1,i,1)\".\"substr($1,i+1)\"@\"$2}" 1.txt >2.txt
复制代码

作者: jonm158    时间: 2010-8-17 23:44

cure,你好,你这个命令只能生成这几个
[email]l.ibinglibinglibing890@gmail.com[/email]
[email]li.binglibinglibing890@gmail.com[/email]
[email]lib.inglibinglibing890@gmail.com[/email]
[email]libi.nglibinglibing890@gmail.com[/email]
[email]libin.glibinglibing890@gmail.com[/email]
[email]libing.libinglibing890@gmail.com[/email]
[email]libingl.ibinglibing890@gmail.com[/email]
[email]libingli.binglibing890@gmail.com[/email]
[email]libinglib.inglibing890@gmail.com[/email]
[email]libinglibi.nglibing890@gmail.com[/email]
[email]libinglibin.glibing890@gmail.com[/email]
[email]libinglibing.libing890@gmail.com[/email]
[email]libinglibingl.ibing890@gmail.com[/email]
[email]libinglibingli.bing890@gmail.com[/email]
[email]libinglibinglib.ing890@gmail.com[/email]
[email]libinglibinglibi.ng890@gmail.com[/email]
[email]libinglibinglibin.g890@gmail.com[/email]
[email]libinglibinglibing.890@gmail.com[/email]
[email]libinglibinglibing8.90@gmail.com[/email]
[email]libinglibinglibing89.0@gmail.com[/email]
[email]libinglibinglibing890.@gmail.com[/email]
我的要求还要生成这样的
[email]libin.glibinglibing890.@gmail.com[/email]
[email]libinglibin.glibing890.@gmail.com[/email]
[email]libin.glibinglibi.ng890.@gmail.com[/email]
作者: jonm158    时间: 2010-8-17 23:57

应是这样的效果,前面十楼,523066680版主,写了一个,但对字符太长的,计算出来太慢了
a.b.c.d
a.b.cd
a.bc.d
a.bcd
ab.c.d
ab.cd
abc.d
abcd
请各高手显神通,指导
作者: 523066680    时间: 2010-8-18 10:03

vbs版的:改成cscript模式打开,这样方便看处理进度
  1. if wscript.arguments.count=0 then
  2.    createobject("wscript.shell").run _
  3.    "cmd /c cscript " &chr(34) &wscript.scriptname &chr(34) & " isme"
  4.    wscript.quit
  5. end if
  6. :rem paktc
  7. current=replace(wscript.scriptfullname,wscript.scriptname,"")
  8. '我获得当前路径的方法,很囧...
  9. set fs=createobject("scripting.filesystemobject")
  10. set result=fs.createtextfile(current &"result.txt")
  11. set inp=wscript.stdin
  12. set put=wscript.stdout
  13. test "a","bcdefghijklmn"
  14. inp.readline
  15. function test(strcho,strhave)
  16.    if len(strhave)>0 then
  17.      tmpstr=strcho &"." & left(strhave,1)
  18.      test tmpstr,mid(strhave,2)
  19.      tmpstr=strcho & left(strhave,1)
  20.      test tmpstr,mid(strhave,2)
  21.    else
  22.      put.writeline strcho
  23.      result.writeline strcho
  24.    end if
  25. end function
复制代码
上面vbs 一边显示一边写入result.txt

[ 本帖最后由 523066680 于 2010-8-18 10:07 编辑 ]
作者: 523066680    时间: 2010-8-18 10:15

这个东西还可以优化速度的
a.b.c.d
a.b.cd
a.bc.d
a.bcd
============
ab.c.d
ab.cd
abc.d
abcd
============
区别是 "a."和a  ,后面的完全一样……   不过…… 我也是有工作的人,闪了。
作者: jonm158    时间: 2010-8-18 12:11

亲爱的版主,请明确指导一下,我笨鸟实在是不明白,谢谢
作者: jonm158    时间: 2010-8-18 12:29

版主达人,请优化一个给我哦,谢谢
作者: 523066680    时间: 2010-8-18 15:46

vbs的话速度已经快很多了, 约莫着十几二十分钟可以完成吧?
等重新写一个又得等,时间已经过了哦?   去威客网吧,找一个处理得彻头彻尾的人
作者: 523066680    时间: 2010-8-18 17:39

优化了,测试字符串abcdefghijklmnopqrstu  21个字母
处理时间3秒到5秒左右
结果生成到 result.txt,  33MB   1048577 行 (第一行为空行)
2的20次方=1048576
  1. if wscript.arguments.count=0 then
  2.    createobject("wscript.shell").run _
  3.    "cmd /c cscript " &chr(34) &wscript.scriptname &chr(34) & " isme"
  4.    wscript.quit
  5. end if
  6. :rem paktc
  7. current=replace(wscript.scriptfullname,wscript.scriptname,"")
  8. '我获得当前路径的方法,很囧...
  9. set fs=createobject("scripting.filesystemobject")
  10. set result=fs.createtextfile(current &"result.txt")
  11. set inp=wscript.stdin
  12. set put=wscript.stdout
  13. 'src 定义整条字符串,不支持空格哦   <<-  定义在这里
  14. src="abcdefghijklmnopqrstu"
  15. srca=mid(src,1,10)
  16. srcb=mid(src,11)
  17. strall=""
  18. '先处理右边的参数示例"a","bcd"
  19. test mid(srcb,1,1),mid(srcb,2)
  20. put.writeline "Step 1 over.  Step2:"
  21. '然后前面这部分的,每一个都连接之前的全部结果
  22. funcb mid(srca,1,1) ,mid(srca,2) &" "
  23. result.close
  24. inp.readline
  25. function test(strcho,strhave)
  26.    if len(strhave)>0 then
  27.      tmpstr=strcho &"." & left(strhave,1)
  28.      test tmpstr,mid(strhave,2)
  29.      tmpstr=strcho & left(strhave,1)
  30.      test tmpstr,mid(strhave,2)
  31.    else
  32.      strall=strall &vbcrlf & strcho
  33.    end if
  34. end function
  35. function funcb(strcho,strhave)
  36.    strcho=replace(strcho," ","")
  37.    if len(strhave)>0 then
  38.      tmpstr=strcho &"." & left(strhave,1)
  39.      funcb tmpstr,mid(strhave,2)
  40.      tmpstr=strcho & left(strhave,1)
  41.      funcb tmpstr,mid(strhave,2)
  42.    else
  43.      result.write replace(strall,vbcrlf,vbcrlf &strcho)
  44.      put.writeline strcho
  45.    end if
  46. end function
复制代码

作者: jonm158    时间: 2010-8-18 21:33

谢谢版主,也谢谢各位大大了
作者: youlishen    时间: 2011-11-27 14:06

这个借鉴的地方很多,学习了,标记




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2