好玩的vbs特色代码第3/6页
更新时间:2007年03月08日 00:00:00 作者:
vbs 实用秘籍几则。
1,在客户端的应用:
要解浏览器对象模型,认为alert,setTimeOut等是js的内容是常见错误认识,实际上那只是window对象的方法而已。
客户端调用vbs函数要显式声明语言:onclick="vbs:函数名"
解决类似js的
对象.onclick=function(){}问题可以用GetRef函数,
Set object.eventname = GetRef(procname)
2,认为vbs没有eval,escape等函数?
实际上vbs不仅有eval而且还有execute,execScript。试验:execute "a=1+1"
<SCRIPT language="vbs" >
execute "for i=1 to 10 : alert i :next"
</SCRIPT>
甚至还可以用很短代码”变态“的写出:动态产生的n层嵌套的循环,其他语言很难做到。
<SCRIPT LANGUAGE=vbs>
'10多行代码实现n个数字全排列
dim n:n=4
dim S
dim w:w=0
for i=1 to n
S=S & "for i" & i & " =1 to n" & chr(13)
next
S=S & " if not("
for i=1 to n
for j=i to n
if i<>j then S=S & "i" & i & "=i" & j & " or "
next
next
S=left(S,len(S)-4) & ") then " & chr(13)
for i=1 to n
S=S & "document.write i" & i & chr(13)
next
S=S & "document.write " & chr(34) & "<br/>" & chr(34) & chr(13) & "end if" & chr(13)
w=w+1
for i=1 to n
S=S & "Next" & chr(13)
next
execScript S,"vbs"
</SCRIPT>
3,case的奇怪用法:
case 1,2可以表示两种情况,而且case后面可以接变量或者表达式case a 或者case 1+1这样用,这点非常灵活,C#和js的case语句是不允许的。
4,还有冒号和下划线的用法,我相信这些可能是很多人不常用的。dim a:a=1
for y=0 to 9:for x=0 to 8
AllQiZi(x,y) =0
next:next
适当减少代码编辑行数,好玩而已,不要到处乱用,不过还真有一个哥们把所有代码写在一行。
5,锯齿数组
dim Arr,arrX(),arrY():redim arrX(0):redim arrY(0)
Arr=Array(arrX,arrY)
这个Arr就是数组的数组,里面的内容可以是任何变量,任意长短混合的,object也可以!
Arr(0)(0)实际上就是arrX(0)
6, 对上面的arrX 数组增加新项,在js数组里直接可以增加,还可以排序,因为js没有真正的数组!真正的数组是不可以在不重新定义的情况下增加项目的。vbs的数组更接近于真正的数组,运行速度比js的数组对象要快很多。但是越接近低层,用起来也许越不方便。
addArr arrX ,1
addArr arrX ,2
sub addArr(byref Arr,newItem)'一维数组增加一项
if IsEmpty(Arr(0)) then
Arr(0)=newItem
exit sub
else
dim bound:bound=ubound(Arr)
Redim Preserve Arr(bound+1)
Arr(bound+1)=newItem
end if
end sub
以下是对比js和vbs数组的执行速度,只是赋值而已,差别巨大!
<SCRIPT LANGUAGE=javascript>
var jstest = 10 * 10000 ;
var jsArr = new Array(jstest) ;
var jsBegin = new Date().getTime();
for(i=0;i<jstest;i++)
{
jsArr[i]="任何东西" ;
}
var jsEnd = new Date().getTime();
document.write("js做完这件事需要" + (jsEnd - jsBegin) + "豪秒<br/>");
</SCRIPT>
<SCRIPT LANGUAGE=vbscript>
dim vbstest : vbstest = 10 * 10000
dim vbsArr() : redim vbsArr(vbstest)
dim vbsBegin : vbsBegin = Timer()
for j =0 to vbstest
vbsArr(j) = "任何东西"
next
dim vbsEnd : vbsEnd = Timer()
document.write "vbs做完这件事需要" & (vbsEnd - vbsBegin) * 1000 & "豪秒<br/>"
</SCRIPT>
js做完这件事需要2329豪秒
vbs做完这件事需要108.8867豪秒
但是js数组有sort方法,这是及其方便的,vbs只能自己写排序了,冒泡?太土了吧。
sub sortA(Arr)
'输入:Arr时间结果数组array
'堆排序,复杂度n*log(n)/log(2),如果8个数就是24次,如果用冒泡是8^2=64次
dim n,i,L,ir,rArr,j
n = ubound(Arr)
L = int(n / 2)+1
ir = n
do
if L > 1 then
L = L - 1
rArr = Arr(L)
else
rArr = Arr(ir)
Arr(ir) = Arr(1)
ir = ir - 1
if ir = 1 then
Arr(1) = rArr
exit sub
end if
end if
i = L
j = 2 * L
while j <= ir
if j < ir then
if Arr(j) < Arr(j + 1) then j = j + 1
end if
if rArr < Arr(j) then
Arr(i) = Arr(j)
i = j
j = 2 * j
else
j = ir + 1
end if
wend
Arr(i) = rArr
loop
end sub
相关文章
视频转换大师WinMPG Video Convert 6.63
视频转换大师WinMPG Video Convert 6.63...2007-04-04getSQLinfo.vbs 获得SQL数据/日志空间使用情况的脚本
这个脚本可以获取SQL数据/日志的空间使用情况方便及时了解sql使用空间情况2008-07-07SQL获取表结构的show_table.vbs (冰点极限NP)
SQL获取表结构的show_table.vbs,用vbs实现查看sql数据库的表结构的代码。需要传入用户名密码与数据库名称,具体的看程序帮助。2010-11-11
最新评论