朋友手中有上千个域名,现在cn域名续费涨价了,准备抛弃一些。让我帮忙写个小程序来筛选一下,看看那个有留下的价值。当时我放出大话,20分钟搞定。最初设想的是生成Excel文件,通过Excel中的筛选来统计。
代码如下(附件包中的excel.vbs):
'域名统计程序,生成excel结果 '通过VBS获取当前目录,替代ASP中的Server.Mappath Function Mappath(v) Mappath=fso.getAbsolutePathName(v) End Function '写得一个函数,用于判断字符串中是否含有数字。 Function iszajiao(v) for i=1 to len(v) if isnumeric(mid(v,i,1)) then iszajiao=1 exit for end if next End Function '创建一个FSO对象 Set fso=CreateObject("Scripting.FileSystemObject") '判断是否有生成的Excel结果ok.xls,如果有,则删除 if fso.fileexists(mappath("ok.xls")) then fso.getfile(mappath("ok.xls")).delete '创建一个ok.xls set fto=fso.createtextfile(mappath("ok.xls"),2) wscript.echo "吴哥哥,请稍等,我正在为您工作中。。。" fto.writeline "域名 后缀 位数 类型" '寻找当前目录中的所有txt文件,如果有则依次打开 for each file in fso.getfolder(mappath(".")).files if Lcase(fso.getExtensionName(file))="txt" then set db=fso.opentextfile(file,1) '如果不是在txt文件的结尾,则循环读取 do while not db.atendofstream rs=db.readline '获取域名的位数,即第一次出现.的位置-1 ws=cint(instr(rs,".")-1) '防止本行数据为空行 if ws>=1 then rsi=rsi+1 '获取域名 ym=left(rs,ws) '获取域名后缀 hz=replace(rs,ym&".","") '分析域名类型,如果ym为数字则为数字 if isnumeric(ym) then lx="数字" '否则,如果出现数字则为杂交 elseif iszajiao(ym)=1 then lx="杂交" '其他类型就剩下字母了 else lx="字母" end if '输出 fto.writeline ym&" "&hz&" "&ws&" "&lx end if loop end if next fto.close set fto=nothing msgbox "吴哥哥,我帮你完成工作了,怎么谢我呢?请我吃MM吧" |
正准备邀功请赏的时候,朋友竟然说没用过Excel,狂吐血,并且还不想用数据库。这儿就有点复杂了,初步设想生成HTML文件,然后把数据保存到数组中,根据Select的选项来现在最终结果。
我是从两个方便考虑的,生成网页部分由Javascript控制,这些Javascript最终代码由VBScript来生成。
思路明确了,首先来考虑由Javascript控制的网页。演示页面:http://www.miaoqiyuan.cn/products/js-array-ymtj.html
<html><head><title>生成结果</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <script type="text/javascript"> var rs=new Array(); rs[1]=Array('sjtian','cn',6,'字母'); rs[2]=Array('zhaozhetao','cn',10,'字母'); rs[3]=Array('qiangjiaoshu','cn',12,'字母'); rs[4]=Array('bszange','cn',7,'字母'); rs[5]=Array('6688fafa','cn',8,'杂交'); rs[6]=Array('xswjm','cn',5,'字母'); rs[7]=Array('fpjtw','cn',5,'字母'); rs[8]=Array('jssj','js.cn',4,'字母'); rs[9]=Array('chengzhun','com',9,'字母'); rs[10]=Array('yfxqqiu','cn',7,'字母'); </script> <script type="text/javascript"> var __res,__lx,__ws,__hz,__j,__isrun,__rscount=0; var __mqy=function(){ //判断是否在进程中,如果在进程中则退成,否则将进程设为活动 if(__isrun==1) return eval(__sorry("还在运算中,你想累死你的爱机?")); else __isrun=1; //和朋友开个玩笑 var __mm=confirm("吴哥哥,你确定请我吃MM吗?"); if(__mm==false) return eval(__sorry("好,你不请我吃,那我不工作了")); if(typeof(__res)!="object") __res=document.getElementById("__res"); //改变字体颜色,背景,提示现在程序正在执行中。 __res.style.background="#FF0"; __res.style.color="#F00"; __res.innerHTML="<p>谢谢吴哥哥请我吃MM,正在生成中,请稍后。。。</p><p>因为数据过多,程序可能执行有点慢,请耐心等候</p>"; //一秒之后执行程序,这样做是因为有时候DOM修改还没有生效,如果数据过多,进入假死状态,用户以为真死机了 //给程序一秒中的反应时间 setTimeout("__run()",1000); } //主要查询程序就是它啦 var __run=function(){ //获取各个Select的值 __ws=document.getElementById("_ws").value; __hz=document.getElementById("_hz").value; __lx=document.getElementById("_lx").value; __j=""; for(i=1;i<rs .length;i++){ //设置输出HTML var _isok="<li>"+rs[i][0]+"."+rs[i][1]+""; //只有不符合一下条件的才是符合我们要筛选的结果 //虽然只有一个if,大家可以仔细看看,包含了十几种情况 if(__ws!="all"&&__ws!=rs[i][2]||__hz!="all"&&__hz!=rs[i][1]||__lx!="all"&&__lx!=rs[i][3]) _isok=""; else //如果符合条件,符合条件的结果数加一 __rscount++; //将判读结果附加到__j __j+=_isok; } if(__j=="") //如果__j没有改变,说明没有符合的条件记录 __res.innerHTML="<p>没有找到任何记录</p>"; else //输出符合条件的记录数及筛选结果 __res.innerHTML="<p class=c>共找到"+__rscount+"条记录。</p>"+__j; __res.style.background="#0F0"; __res.style.color="#000"; //修改运行状态为未运行 __isrun=0; //修改符合条件记录数为0,供下次查询使用 __rscount=0; } var __sorry=function(t){ alert(t); } </rs></script> <style type="text/css"> div{width:800px;background:#CCC;border:solid 2px #666;margin-top:10px;padding:10px;} div p.c{color:#F00;background:#FF0;border:solid #333 2px;padding:5px;} </style> </head> <body> <div> 按长度筛选: <select id="_ws"> <option value="all">不区分长度</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> </select> 按类型筛选: <select id="_lx"> <option value="all">不区分类型</option> <option value="字母">字母(abc.com)</option> <option value="数字">数字(123.com)</option> <option value="杂交">杂交(f8.com)</option> </select> 按后缀筛选: <select id="_hz"> <option value="all">不区分后缀</option> <option value="org">org</option> <option value="com">com</option> <option value="net">net</option> <option value="cn">cn</option> </select> <input type="button" onclick="__mqy();" value="立即筛选" /> </div> <div id="__res"> 吴哥哥,你在上边选择你的条件 </div> </body> </html> |
网页写好了,接下来要做的就是让vbscript脚本读取当前目录中所有的txt文件,来生成html
代码如下(附件包中的js.vbs):
'域名统计程序,生成html结果 '通过VBS获取当前目录,替代ASP中的Server.Mappath Function Mappath(v) Mappath=fso.getAbsolutePathName(v) End Function '写得一个函数,用于判断字符串中是否含有数字。 Function iszajiao(v) for i=1 to len(v) if isnumeric(mid(v,i,1)) then iszajiao=1 exit for end if next End Function '创建一个FSO对象 Set fso=CreateObject("Scripting.FileSystemObject") '判断是否有生成的结果ok.html,如果有,则删除 if fso.fileexists(mappath("ok.html")) then fso.getfile(mappath("ok.html")).delete '创建一个ok.html set fto=fso.createtextfile(mappath("ok.html"),2) wscript.echo "吴哥哥,请稍等,我正在为您工作中。。。" scrt="<html><head><title>运行结果</title><meta http-equiv='Content-Type' content='t" scrt=scrt+"ext/html; charset=gb2312' /><script type='text/javascript'>" fto.writeline scrt fto.writeline "var rs=new Array();" '寻找当前目录中的所有txt文件,如果有则依次打开 for each file in fso.getfolder(mappath(".")).files if Lcase(fso.getExtensionName(file))="txt" then set db=fso.opentextfile(file,1) '如果不是在txt文件的结尾,则循环读取 do while not db.atendofstream rs=db.readline '获取域名的位数,即第一次出现.的位置-1 ws=cint(instr(rs,".")-1) '防止本行数据为空行 if ws>=1 then rsi=rsi+1 '获取域名 ym=left(rs,ws) if wss="" then wss=ws for each wsi in split(wss,"|") if cint(wsi)=ws then wsu=cint(ws) exit for end if next if wsu<>ws then wss=wss&"|"&ws end if '获取域名后缀 hz=replace(rs,ym&".","") if hzs="" then hzs=hz for each hzi in split(hzs,"|") if hzi=hz then hzu=hz exit for end if next if hzu<>hz then hzs=hzs&"|"&hz end if '分析域名类型,如果ym为数字则为数字 if isnumeric(ym) then lx="数字" '否则,如果出现数字则为杂交 elseif iszajiao(ym)=1 then lx="杂交" '其他类型就剩下字母了 else lx="字母" end if fto.writeline "rs["&rsi&"]=Array('"&ym&"','"&hz&"',"&ws&",'"&lx&"');" end if loop end if next scrt="</script><script type='text/javascript'>var __res,__lx,__ws,__hz,__j,__isrun," scrt=scrt+"__rscount=0;var __mqy=function(){if(__isrun==1)return eval(__sorry('还在" scrt=scrt+"运算中,你想累死你的爱机?'));else __isrun=1;var __mm=confirm('吴哥哥,你" scrt=scrt+"确定请我吃MM吗?');if(__mm==false)return eval(__sorry('好,你不请我吃,那" scrt=scrt+"我不工作了'));if(typeof(__res)!='object')__res=document.getElementById('__" scrt=scrt+"res');__res.style.background='#FF0';__res.style.color='#F00';__res.innerHTM" scrt=scrt+"L='<p>谢谢吴哥哥请我吃MM,正在生成中,请稍后。。。</p><p>因为数据过多,程序" scrt=scrt+"可能执行有点慢,请耐心等候</p>';setTimeout('__run()',1000);};var __run=funct" scrt=scrt+"ion(){__ws=document.getElementById('_ws').value;__hz=document.getElementById" scrt=scrt+"('_hz').value;__lx=document.getElementById('_lx').value;__j='';for(i=1;i<rs ." scrt=scrt+"length;i++){var _isok='<li>'+rs[i][0]+'.'+rs[i][1]+'';if(__ws!='all'&&__" scrt=scrt+"ws!=rs[i][2]||__hz!='all'&&__hz!=rs[i][1]||__lx!='all'&&__lx!=rs[i][3])_isok=''" scrt=scrt+";else __rscount++;__j+=_isok;}if(__j=='')__res.innerHTML='<p>没有找到任何记录< " scrt=scrt+"/p>';else __res.innerHTML='</p><p class=c>共找到'+__rscount+'条记录。</p>'+__j;__res" scrt=scrt+".style.background='#0F0';__res.style.color='#000';__isrun=0;__rscount=0;};var __so" scrt=scrt+"rry=function(t){alert(t);}</rs></script><style type='text/css'>div{width:800px;backgroun" scrt=scrt+"d:#CCC;border:solid 2px #666;margin-top:10px;padding:10px;}div p.c{color:#F00;backg" scrt=scrt+"round:#FF0;border:solid #333 2px;padding:5px;}</style></head><body><div>按长度筛选:" scrt=scrt+"<select id='_ws'><option value='all'>不区分长度</option>" fto.writeline scrt scrt="" for each wsi in split(wss,"|") fto.writeline "<option value='"&wsi&"'>"&wsi&"</option>" next scrt="</select> 按类型筛选<select id='_lx'><option value='all'> 不区分类型</option><option valu" scrt=scrt+"e='字母'>字母(abc.com)</option><option value='数字'>数字(123.com)</option><option " scrt=scrt+"value='杂交'>杂交(f8.com)</option></select> 按后缀筛选<select id='_hz'><option value" scrt=scrt+"='all'>不区分后缀</option>" fto.writeline scrt scrt="" for each hzi in split(hzs,"|") fto.writeline "<option value='"&hzi&"'>"&hzi&"</option>" next scrt="</select><input type='button' onclick='__mqy();' value='立即筛选' /></div><div id='__res'>" scrt=scrt+"吴哥哥,你在上边选择你的条</div></body></html>" fto.writeline scrt fto.close set fto=nothing msgbox "吴哥哥,我帮你完成工作了,怎么谢我呢?请我吃MM吧" |
忙了大半个晚上终于搞定了。哈哈,启源果然是天才(YY一下)。
本程序可以智能的读取程序所在目录中的所有txt文件,数据格式为每行一个域名。
现在cn域名续费涨价了,如果你手上也有很多域名,不妨用本程序来筛选一下,我已经打包成rar文件,供大家下载。
下载地址:http://www.miaoqiyuan.cn/products/yuming-tj-to-excel-html-xls.rar
转帖请注明出处:域名统计筛选程序,生成Excel文件(.xls)或HTML网页文件(.html)(http://www.miaoqiyuan.cn/p/yuming-tj-to-excel-html-xls)
看了您的文章之后很想向您请教一个问题,还请帮忙:
事情的原有是这样的:我每月都会收到一个表格,表格包含以下项目:
班级 / 姓名 / 种类(分成3类:留学生/社区学生/社区外学生)/ 课堂分数 / 总分数
拿到这个表格后,我需要将表格中的3类学生分别分开,然后按课堂分数分级:分别分为80分~100分,60分~79分,60分以下。然后把每个类别的学生在每个分数等级的前10名提取出来制成单一的Excel表格,最后在表格中为每个学生配上照片。另外,每个学生有一个兴趣爱好列表,大概有8项兴趣爱好。我需要对应提取出来的学生名单把相应学生的兴趣爱好加入到刚才制成的excel中。
说实话,这是个体力活,如果用Excel的筛选功能也能够快速提取制作表格,再加上配照片和完善学生兴趣爱好,很毫时间。(学生也比较多,有600多人)
我想请教您能够用什么办法来解决
如果程序实现,也很复杂。我的这个只是一个简单的导出数据功能,导出的是csv格式的,并不是真正意义上的Excel文件。