在我正在制作的程序中,我需要将一组字符转换为数字。这组字符很容易改变,并且还包括转换中的CaPiTaL字母,其中大写字母将转换为与特殊字符不同的数字(例如"#","& ;"," $"等)。数字遵循一个简单的模式; a = 1,b = 2,c = 3等
我用来执行此操作的当前方法是使用单独的:
If letter = "a" then
number = 1
End If
然而,这种方法是一项繁琐的工作,并且似乎也有点低效(就通过它运行连续/大量字母而言)。是否有任何函数,子等可用于在VBScript中执行此类操作(特别是在VB Express 2010中)?
答案 0 :(得分:1)
如有疑问,请阅读documentation。 Asc()
函数返回给定ASCII字符的character code:
>>> WScript.Echo Asc("a")
97
>>> WScript.Echo Asc("A")
65
另一种选择是使用所需的映射创建dictionary:
Set map = CreateObject("Scripting.Dictionary")
map.Add "a", 1
map.Add "b", 2
...
可以这样使用:
>>> WScript.Echo map("a")
1
>>> WScript.Echo map("b")
2
答案 1 :(得分:1)
步骤0:使用位置映射:
Option Explicit
' Start with a function working on a string that calls
' a character decode function
Function decodeS(s)
ReDim aTmp(Len(s) - 1)
Dim i
For i = 0 To UBound(aTmp)
aTmp(i) = decodeC(Mid(s, i + 1, 1))
Next
decodeS = aTmp
End Function
' naive decode via InStr/Index/Position
Function decodeC(c)
decodeC = InStr("abc", c)
End Function
WScript.Echo "acbbca", Join(decodeS("acbbca"))
第1步:保护位置映射:
' guarded decode via InStr/Index/Position
Function decodeC(c)
decodeC = -1
Dim p : p = InStr("abcdefghiA", c)
If p Then decodeC = p
End Function
WScript.Echo "acbbcAx", Join(decodeS("acbbcAx"))
第2步:位置映射'不起作用',切换到查找:
' decode via parallel array and InStr/Index/Position
Dim gsC : gsC = "aAbBcC"
Dim gaC : gaC = Split("-1 1 10 2 20 3 30")
Function decodeC(c)
decodeC = CLng(gaC(InStr(gsC, c)))
End Function
WScript.Echo "CcBxbAa", Join(decodeS("CcBxbAa"))
第3步:您更喜欢字典查找:
' decode via dictionary
Dim gdC : Set gdC = CreateObject("Scripting.Dictionary")
gdC("a") = 1
gdC("A") = 10
Function decodeC(c)
decodeC = -1
If gdC.Exists(c) Then decodeC = gdC(c)
End Function
WScript.Echo "CcBxbAa", Join(decodeS("CcBxbAa"))