存档

2009年12月 的存档

测试某文件中字符串的重复次数,写了很长时间了。经常用到,发上来备用。
可获得某文件中某字符串中某字符串出现的次数~

staTme=timer()
set fso=createobject(“scripting.filesystemobject”)
set t=fso.opentextfile(fso.getabsolutepathname(“in.txt”),1)
set o=fso.opentextfile(fso.getabsolutepathname(“out.xls”),2)
a=”;”
do while not t.atendofstream
p=t.readline
if instr(a,”;”&p&”:”)=0 then
a=a&p&”:1;”
else
at=”"
for each c in split(a,”;”)
if c”" then
if instr(c,p&”:”)>0 then
if instr(c,”:”)>0 then
pt=split(c,”:”)
at=at&pt(0)&”:”&cint(pt(1))+1&”;”
end if
else
at=at&c&”;”
end if
end if
next
a=at
end if
loop
o.write replace(replace(a,”;”,vbCrlf),”:”,” “)
msgbox “导入成功,用时”&(timer()-staTme)*1000&”毫秒。”

staTme=timer()
set fso=createobject(“scripting.filesystemobject”)
set t=fso.opentextfile(fso.getabsolutepathname(“in.txt”),1)
set o=fso.opentextfile(fso.getabsolutepathname(“out.xls”),2)
a=”;”
x=t.readall
for each p in split(x,vbCrlf)
if instr(a,”;”&p&”:”)=0 then
a=a&p&”:1;”
else
at=”"
for each c in split(a,”;”)
if c”" then
if instr(c,p&”:”)>0 then
if instr(c,”:”)>0 then
pt=split(c,”:”)
at=at&pt(0)&”:”&cint(pt(1))+1&”;”
end if
else
at=at&c&”;”
end if
end if
next
a=at
end if
next
o.write replace(replace(a,”;”,vbCrlf),”:”,” “)
msgbox “导入成功,用时”&(timer()-staTme)*1000&”毫秒。”

十二 30th, 2009 | Filed under ASP, Products(作品), VBscript

经常用asp的同行,可能会建议用set rs=conn.execute(sql)来代替set rs=server.createobject(“ADODB.recordset”):rs.open conn,sql,1,1。还有一些同行更提出了用set rs=conn.execute(sql):res=rs.getRows(100)来优化ASP程序。其实在没有做此实验前,我也是很相信这种方法的。实际效果果真如此吗?经过一番测试,我发现结果远非如此,set rs=server.createobject(“ADODB.recordset”)的方法比set rs=conn.execute的方法快4~5倍。这个结果您信吗?不信,更我来一起做这个测试。猫七(苗启源)博客首发,转载请注明出处,原文地址: (http://www.miaoqiyuan.cn/p/conn-execute_rs-getrows)。
数据说明真相。首先创建一个多记录的数据库。

set conn=createobject(“adodb.connection”)
conn.open “provider=microsoft.jet.oledb.4.0;data source=E:\labs\miaoqiyuan.cn\g.mdb”
do while conn.execute(“select count(id) from site”)(0)<1000000
conn.execute(“insert into site(sitename,siteadmin,siteurl,sitekey) values(‘苗启源’,'http://localhost/app_login/’,'http://www.miaoqiyuan.cn’,'e10adc3949ba59abbe56e057f20f883e’)”)
loop

经过几个小时的运行,我得到了一个有63万多条记录的数据库。数据库大小为99.7MB(测试数据库下载地址http://www.miaoqiyuan.cn/products/rs-execute-test.rar)。
为了保证数据的真实性,我们用公共的头部header.asp来保存数据库连接字符串。footer.asp来保存运行时间。
运行环境,Windows 2003 Server SP2。IIS6.0,CPU E2200 2.2GHz,内存2Gx2。硬盘300G SATA+80G ATA。
公共头部:header.asp

< %
startTme=timer()
set conn=server.createobject("ADODB.connection")
conn.open "provider=microsoft.jet.oledb.4.0;data source="&server.mappath("g.mdb")
%>

[...]

十二 26th, 2009 | Filed under ASP, Experience(经验), Share(分享), Thinks(想法), VBscript

一直想做一个自动读取RSS,自动更新的站。今晚正好没有事,先写个Demo。
临时先保存到文本文件中。顺便复习一下Python。
用到了MD5,XML.DOM,URllib,OS库,都是默认的。
直接插代码吧。

import sys
#coding=gb2312
reload(sys)
sys.setdefaultencoding(‘utf-8′)
import md5
import os
import urllib
import xml.dom.minidom as xxs

#Config
tmpPath=’E:/Else/rss-engins/’

#FileName2Md5
def md5str(t):
h=md5.new()
h.update(t)
return str(h.hexdigest())

#FileSystem
def saveFile(t,c):
f=’data/’+md5str(t)+’.txt’
if os.path.isfile(f):
return
fi=open(tmpPath+’index.txt’,'a’)
fi.writelines(t+’\n’)
fg=open(tmpPath+f,’w')
fg.writelines(c)

#RSS
def saveRss(f,c,encoding):
fp=open(f,’w')
if encoding==’gb2312′:
c=c.decode(‘gb2312′).encode(‘utf-8′)
c=c.replace(‘encoding=”gb2312″‘,’encoding=”utf-8″‘)
fp.writelines(c)
fp.close()
return f
def getRss(url):
ul=urllib.urlopen(url)
t=ul.read()
ul.close()
return t
def rssMain(url,encoding):
f=tmpPath+’xml/’+md5str(url)+’.xml’
if os.path.isfile(f):
return “isok”
return saveRss(f,getRss(url),encoding)

#getInfo
def getRssInfo(url,encoding):
t=rssMain(url,encoding)
if t==’isok’:
print ‘该路径已经采集过了。’
return
t=xxs.parse(t)
ri=t.getElementsByTagName(“channel”)[0].getElementsByTagName(“item”)
for item in ri:
title=str(item.getElementsByTagName(“title”)[0].childNodes[0].data)
content=str(item.getElementsByTagName(“description”)[0].childNodes[0].data)
print ‘保存文章(‘+title+’)中…’
saveFile(title,content)

#处理
def BaiduHi(RS):
for rs in RS:
print ‘加载用户:’+rs+’(http://hi.baidu.com/’+rs+’/rss)…’
getRssInfo(r’http://hi.baidu.com/’+rs+’/rss’,'gb2312′)
print ‘用户:’+rs+’处理完毕。\n’

def SohuBlog(RS):
for rs in RS:
print ‘加载用户:’+rs+’(http://’+rs+’.blog.sohu.com/rss)…’
getRssInfo(r’http://’+rs+’.blog.sohu.com/rss’,'utf-8′)
print ‘用户:’+rs+’处理完毕。\n’

#RSS服务器列表
RssServer=['mqycn','yilin','loveinmyhome','guojing021','900ip','037123']
BaiduHi(RssServer)

RssServer=['appler969','saber-bing','02040229','seahai','satanqueen','douzwang']
SohuBlog(RssServer)

[...]

十二 23rd, 2009 | Filed under Products(作品), Python, Thinks(想法)

今天晚上用电脑,发现C:\根目录多了三个vbs文件。看了下一个超级恐怖的免杀型病毒。
有三个文件,代码每分钟变一次,超恐怖,不过守护进程没写好,很容易清理。到目前为止360,卡巴,瑞星都检测不出来。猜测基本原理如下:
1.vbs
2.vbs
3.vbs
2.vbs保存的应该是病毒主文件的二进制代码,打开时文本类型的,内容为 00 11 22 33。。。
1.vbs,3.vbs每次变量名都是随机生成。假如只有1.vbs,3.vbs,他会去网上下载另外的文件。
1.vbs,2.vbs,3.vbs的代码每分钟变一次。
猜想的:1.vbs读取3.vbs,2.vbs。然后生成随机数,变量保存在3.vbs,把病毒文件转变成数字,并减去这个随机数。3.vbs使用的时候,会用这个随机数来加上2.vbs的编码。
然后一段时间3.vbs再重复1.vbs。三个文件每分钟的代码都不一样。真是恐怖啊~~~~~~~~

十二 6th, 2009 | Filed under 杀毒技巧