第4章VBScript的函数我们已经对VBScript的基本知识有所了解,本章我们将进一步学习VBScript的各类函数。由于学习抽象的函数知识近似于学习理论知识,会让人感到十分的枯燥和乏味,所以在这一章中,我们先从总体上对VBScript的函数作一综合介绍,然后再通过一些典型的例子,来详细讲解较常用到的VBScript函数。4.1VBScript函数综述在VBScript中,函数包含在Function和EndFunction之间,函数和过程有许多相同之处,同样可以获取一定的参数,执行一系列的语句,并完成一定的操作,但和过程不同之处在于,函数会有一个返回值,其语法如下所示:Public|PrivateFunctionname[(argulist)]statementsname=expressionEndFunction和过程一样,使用Private和Public可以表示函数是是公有的还是私有的,缺省情况下,函数默认是公有的。name是函数的名称,其命名需要遵循VBScript关于变量命名的规定。argulist是函数的参数列表,多个参数之间通过逗号进行分隔,参数传递有两种传递方式:ByVal进行值传递、ByRef进行地址传递。statements是函数内执行的脚本。name=expression语句则将expression的结果返回给调用该函数的语句,其中返回的结果数据类型是Variant类型。如果需要在函数执行的过程中,满足某种条件后直接退出函数的处理逻辑,返回主程序,应该使用ExitFunction语句。例如,我们可以编写函数完成将温度的华氏度换算为摄氏度,如下所示:!--FunctionCDegree(ByValfDegree)CDegree=(fDegree–32)*5/9EndFunction--然后我们可以调用这个函数进行获取华氏温度相应的摄氏温度,在下面的语句,我们将华氏100度进行转换:!--Temperature=CDegree(100)--VBScript提供的函数通常称为内部函数,以与用户定义的函数即外部函数相区分。这些内部函数可以完成数学运算、数据子类型的转换、数据格式化等操作。我们可以在脚本中直接调用这些函数完成数据处理而不需要任何预先的声明。下面,我们就对这些函数综合起来进行简要的介绍。4.1.1数据类型判断VBScript中只有一种数据类型Variant,数据类型判断函数可以判断变量的子类型,运用这些函数,我们能够根据变量的子类型,对变量进行合适的处理:1.IsArray:IsArray函数判断变量是否是一个数组,如果是数组,则返回True,否则返回False。2.IsDate:IsDate函数判断表达式是否能够转换为日期,如果能够转换,则返回True,否则返回False。例如,如果变量Today=“12-30-2000”,那么使用IsDate(Today)的返回值为True。3.IsEmpty:IsEmpty函数用于指明变量是否已经被初始化,在声明变量之后,变量将自动被赋值为Empty,这时候使用IsEmpty判断,返回值为True;当变量经过赋值操作之后,调用IsEmpty函数,则返回False。4.IsNull:IsNull函数可以判断变量中存储的是否为Null,如果为Null,返回值为True,否则返回值为False。需要说明的是,Null并不是0,也不是空字符串,而是代表无效数据。5.IsNumeric:IsNumeric函数指明表达式是否能够被转换为数字表达式,如果转换能成功,则返回True,否则返回False。例如,如果字符串Num=“31.24”,那么IsNumeric(Num)的返回值为True。6.IsObject:IsObject函数可以判断变量是否是ActiveX对象,如是ActiveX对象则返回True,否则返回False。7.TypeName和VarType:TypeName和VarType函数都能够返回变量的子类型,不同的是,TypeName返回的是一个指示变量子类型的字符串,而VarType返回的是指示变量子类型的数字。4.1.2格式化函数VBScript中引入了格式化函数,这些函数可以对货币类型数据、时间类型数据、数字和百分比数值等进行格式转换和处理,这些处理是基于控制面板中的区域设置属性完成的。1.FormatCurrency:FormatCurrency函数返回格式化后的货币类型数值,货币符号的设置基于控制面板的区域属性设置中。其语法如下所示:formatCurrency(expression[,NumDigitsAfterDecimal[,IncludeLeadingDigit[,UseParensForNegativeNumbers[,GroupDigits]]]])其中,expression代表将被格式化的表达式,NumDigitsAfterDecimal代表的是小数点后数字位数,IncludeLeadingDigit指示是否将显示数字前面的零,UseParensForNegativeNumbers指示是否使用括号代替负号,GroupDigits指示是否使用区域设置中指定的数字分组符号将数字分组。其信息来源是控制面板中区域设置属性的货币部分,其中,后面三个参数可以有以下取值:(1)TristateTrue,代表选项值为True;(2)TristateFalse,代表选项值为False;(3)TristateUseDefault,代表根据控制面板中的区域设置来进行处理。例如,我们可以将以下货币-12345.78进行格式化显示:FormatCurrency(-12345.78,1,TristateTrue,TristateTrue,TristateTrue)函数的可能返回值是-¥12345.8。2.FormatDateTime:运用FormatDateTime函数,可以用5种日期/时间格式来显示一个日期表达式,其语法如下所示:FormatDateTime(Date[,NamedFormat])其中,Date是将要格式化的日期表达式,NamedFormat是指示日期/时间格式的值,它可以有以下5种取值:(1)vbGeneralDate,如果表达式中只有日期部分,则显示为短日期格式,如果表达式中只有时间部分,则显示为长时间格式,如果两部分都存在,则全部显示;(2)vbLongDate,根据区域设置属性以长日期格式显示日期;(3)vbShortDate,根据区域设置属性以短日期格式显示日期;(4)vbLongTime,根据区域设置属性以长时间格式显示时间;(5)vbShortTime,根据区域设置属性以短时间格式显示时间。例如,我们可以在以下脚本中将2000年12月20日以长日期格式显示:FormatDateTime(“2000/12/20”,vbLongDate)不过,上述语句在不同的计算机上可能运行会得出不同的结果,因为在控制面板中的区域设置属性可能会各不相同。如果长日期样式设置为yyyy‘年’M‘月’d‘日’,那么,上述语句返回的结果将是2000年12月20日。3.FormatNumber:FormatNumber函数可以用于一个数字表达式的自定义显示,其语法如下所示:FormatNumber(expression[,NumDigitsAfterDecimal[,IncludeLeadingDigit[,UseParensForNegativeNumbers[,GroupDigits]]]])其中的参数和FormatCurrency完全相同,不同的是它所有的信息均来自控制面板中区域设置属性的数字部分。例如,FormatNumber(-12.3456,2,TristateFalse,TristateFalse,TristateFalse)的可能反馈结果是-12.35。4.FormatPercent:FormatPercent函数用于返回一个表达式的百分比数值,其语法如下所示:FormatPercent(expression[,NumDigitsAfterDecimal[,IncludeLeadingDigit[,UseParensForNegativeNumbers[,GroupDigits]]]])其中参数和FormatCurrency完全相同,不同之处在于它的信息均来自控制面板中区域设置属性的数字部分。例如,FormatPercent(-12.3456,2,TristateFalse,TristateFalse,TristateFalse)的可能反馈结果是-1234.56%。4.1.3数据类型转换函数运用VBScript的数据类型转换函数,我们可以方便地把数据进行子类型的转换,可以将字符串转换为日期,也可以将数字转换为字符串等等。1.CBool:CBool函数将表达式转换为布尔子类型的数据。2.CByte:CByte函数将表达式转换为字节子类型的数据,例如,CByte(“12”)=12。3.CCur:CCur函数将表达式转换为货币子类型的数据。4.CDate:CDate函数将表达式转换为日期子类型的数据。5.CDbl:CDbl函数将表达式转换为双精度浮点子类型的数据。6.CInt:CInt函数将表达式转换为整数类型的数据。7.CSng:CSng函数将表达式转换为单精度浮点子类型的数据。8.CStr:CStr函数将表达式转换为字符串子类型的数据。例如,CStr(12.34)=“12.34”。9.Hex:Hex函数将数值转换为表示十六进制值的字符串,例如,Hex(31)=“1F”。10.Oct:Oct函数将数值转换为表示八进制值的字符串,例如,Oct(31)=“37”。当然,在上述类型转换中并不能无限制地进行类型转换,比如说,CDate类型转换的表达式必须是能够被识别为日期子类型的表达式,比如说,如果执行CDate(“nothing”)函数,那么将会返回类型不匹配的错误。4.1.4数学运算函数VBScript还提供了一定的数学运算函数,可以完成简单的数学运算功能,当然,由于VBScript的主要应用并不在数学运算中,所以其数学运算功能并不是十分强大,不过灵活运用这些函数也能够极大地方便我们脚本开发:1.Atn:Atn函数用于计算数值的反正切值。2.Cos:Cos函数用于计算角度的余弦值。3.Sin:Sin函数用于计算角度的正弦值。4.Tan:Tan函数用于计算角度的正切值,在这些计算角度的函数中,角度的表达形式应该是弧度,例如,计算30°的正切值,我们需要使用如下方式:Tan(30*3.1415927/180)。5.Exp:Exp函数用于计算自然指数的幂次。6.Log:Log函数用于计算数值的自然对数。7.Sqr:Sqr函数用于计算数值的平方根。8.Randomize:Randomize函数用于初始化随机数生成器。在VBScript中,生成的随机数并不是真正意义上的随机数,而是伪随机序列,在生成第一个随机数的时候,它需要一个数值作为种子值来生成伪随机序列。Randomize函数有一个参数number,Randomize函数执行后可以初始化Rnd函数的随机数生成器,并以number作为其种子值,如果函数省略number,则缺省使用系统计时器返回的值作为种子值。注意,如果不使用Randomize函数,则第一次调用Rnd函数的时候,它将使用相同的数字作为种子值,这样就不能起到生成随机数的作用了。9.Rnd:Rnd函数用于生成一个随机数,这个随机数是一个小于1但大于等于0的小数。Rnd函数也有一个参数number,如果number大于0,则返回伪随机序列中的下一个数值,如果number小于0,则每次都会返回以number为种子值的随机数,如果number等于0,则返回最近生成的数。例如,如果我们需要生成一个5到10之间的随机数,我们可以采用如下公式:Int((10–5+1)*Rnd+5)10.Abs:Abs返回数值表达式的绝对值。11.Int