我正在编写一个 VBScript 函数,它接受一个字符串数组并返回一个按字母顺序排序的相同字符串的数组。理想情况下,我希望这个函数的工作方式与(例如)uCase 函数完全一样,您可以在其中说:
myString = ucase(mystring)
“myString”的值将被其内容的大写版本替换。
但是当我在我的测试脚本中设置一个数组,然后将它提供给我的排序函数时,我得到一个类型不匹配错误,将结果分配给原始变量。我所能想到的是,VBScript 不能让你用另一个数组覆盖一个数组,因为 TypeName 函数告诉我我正在使用的输入变量和排序函数的输出都是相同的类型(“Variant() ”)。
这是我的示例代码,可以为您提供更具体的工作:
Option Explicit
Dim testArray(), thisItem, sortedArray
ReDim testArray(9)
testArray(0)="Xylophone"
testArray(1)="Elephant"
testArray(2)="Ferret"
testArray(3)="Eel"
testArray(4)="Dinosaur"
testArray(5)="Barracuda"
testArray(6)="Ape"
testArray(7)="Weasel"
testArray(8)="Firebird"
testArray(9)="Phoenix"
WScript.Echo "Starting Array:"
For Each thisItem In testArray
WScript.Echo " " & thisItem
Next
' This line will work fine, assigning Variant() to Empty sortedArray
sortedArray = SortArray(testArray)
' This line will generate a type mismatch, assigning Variant() to Variant()
testArray = SortArray(testArray)
WScript.Echo "Sorted Array:"
For Each thisItem In sortedArray
WScript.Echo " " & thisItem
Next
WScript.Quit 0
Function SortArray(ByVal inArray)
Dim a, b, swapVal
For a = UBound(inArray) - 1 To 0 Step -1
For b = 0 To a
If inArray(b) > inArray(b+1) Then
swapVal = inArray(b+1)
inArray(b+1) = inArray(b)
inArray(b) = swapVal
End If
Next
Next
SortArray = inArray
End Function
如果您按原样运行此示例代码,您会发现以“sortedArray=”开头的行可以正常工作。下面以 "testArray=" 开头的行将生成类型不匹配错误。
理想情况下,我希望此功能能够运行,以便这些行中的任何一个或两个都可以正常工作。(换句话说,当我以后使用它时,我不想想“哦,是的,我必须创建另一个变量并将输出分配给它而不是我的原始变量。”)
我是否遗漏了什么,或者 VBScript 无法做我希望它在这里做的事情?