标题: [文本处理] [已解决]批处理可以实现在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
点的个数没有限制,谢谢各位高手朋友
我用下面这个批处理试过,不动- @echo off>nul 3>sub_name.txt
- setlocal enableDelayedExpansion
- set name=libinglibinglibing890
- :lp
- set/a nl+=1
- if not "!name:~%nl%!"=="" goto :lp
- set/a ml=nl-1
- call :showN name %ml%
- echo 名字%name%长度为%nl%,共有%num%个子地址。
- goto :eof
- :showN
- for /l %%a in (1 1 %2) do (
- if not "!%1:~%%a,1!"=="." (
- echo !%1:~,%%a!.!%1:~%%a!@gmail.com&set/anum+=1
- set %11=!%1:~,%%a!.!%1:~%%a!
- call :showN %11 %%a
- )
- )
复制代码
请高手改进
作者: CUer 时间: 2010-8-16 23:02
- 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
- @echo off
- setlocal enabledelayedexpansion
- set str=abcd
- call :act "%str:~0,1%" "%str:~1%"
- :::call :func %StrChoose% %StrHave%
- pause
- exit
-
- :act
- setlocal
- set tmpstr=%~2
- if "%~2"=="" (
- echo %~1
- goto :eof
- )
- call :act "%~1.!tmpstr:~0,1!" "!tmpstr:~1!"
- call :act "%~1!tmpstr:~0,1!" "!tmpstr:~1!"
- 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
- 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
- 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模式打开,这样方便看处理进度- if wscript.arguments.count=0 then
- createobject("wscript.shell").run _
- "cmd /c cscript " &chr(34) &wscript.scriptname &chr(34) & " isme"
- wscript.quit
- end if
- :rem paktc
-
- current=replace(wscript.scriptfullname,wscript.scriptname,"")
- '我获得当前路径的方法,很囧...
- set fs=createobject("scripting.filesystemobject")
- set result=fs.createtextfile(current &"result.txt")
- set inp=wscript.stdin
- set put=wscript.stdout
-
- test "a","bcdefghijklmn"
- inp.readline
-
- function test(strcho,strhave)
- if len(strhave)>0 then
- tmpstr=strcho &"." & left(strhave,1)
- test tmpstr,mid(strhave,2)
- tmpstr=strcho & left(strhave,1)
- test tmpstr,mid(strhave,2)
- else
- put.writeline strcho
- result.writeline strcho
- end if
- 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- if wscript.arguments.count=0 then
- createobject("wscript.shell").run _
- "cmd /c cscript " &chr(34) &wscript.scriptname &chr(34) & " isme"
- wscript.quit
- end if
- :rem paktc
-
- current=replace(wscript.scriptfullname,wscript.scriptname,"")
- '我获得当前路径的方法,很囧...
- set fs=createobject("scripting.filesystemobject")
- set result=fs.createtextfile(current &"result.txt")
-
- set inp=wscript.stdin
- set put=wscript.stdout
-
- 'src 定义整条字符串,不支持空格哦 <<- 定义在这里
- src="abcdefghijklmnopqrstu"
- srca=mid(src,1,10)
- srcb=mid(src,11)
-
- strall=""
- '先处理右边的参数示例"a","bcd"
- test mid(srcb,1,1),mid(srcb,2)
- put.writeline "Step 1 over. Step2:"
- '然后前面这部分的,每一个都连接之前的全部结果
- funcb mid(srca,1,1) ,mid(srca,2) &" "
- result.close
- inp.readline
-
- function test(strcho,strhave)
- if len(strhave)>0 then
- tmpstr=strcho &"." & left(strhave,1)
- test tmpstr,mid(strhave,2)
- tmpstr=strcho & left(strhave,1)
- test tmpstr,mid(strhave,2)
- else
- strall=strall &vbcrlf & strcho
- end if
- end function
-
- function funcb(strcho,strhave)
- strcho=replace(strcho," ","")
- if len(strhave)>0 then
- tmpstr=strcho &"." & left(strhave,1)
- funcb tmpstr,mid(strhave,2)
- tmpstr=strcho & left(strhave,1)
- funcb tmpstr,mid(strhave,2)
- else
- result.write replace(strall,vbcrlf,vbcrlf &strcho)
- put.writeline strcho
- end if
- end function
复制代码
作者: jonm158 时间: 2010-8-18 21:33
谢谢版主,也谢谢各位大大了
作者: youlishen 时间: 2011-11-27 14:06
这个借鉴的地方很多,学习了,标记
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |