将字符转换为数字

Converting characters to numbers

在我目前正在制作的程序中,我需要将某组字符转换为数字。这组字符容易变化,在转换中还包括大写字母,其中大写字母将转换为与特殊字符(如“#”、“&”、“$”等)不同的数字。数字遵循一个简单的模式; a = 1, b = 2, c = 3, 等等

我目前使用的方法是使用单独的:

If letter = "a" then
  number = 1
End If

然而,这种方法写起来很麻烦,而且效率似乎有点低(就通过它运行 continuous/bulk 数量的字母而言)。在 VBScript 中(特别是在 VB Express 2010 中)是否有任何函数、sub 等可用于执行这样的操作?

如有疑问,请阅读给定 ASCII 字符的 documentation. The Asc() function returns the character code

>>> <b>WScript.Echo Asc("a")</b>
97
>>> <b>WScript.Echo Asc("A")</b>
65

另一种选择是创建具有所需映射的 dictionary

Set map = CreateObject("Scripting.Dictionary")
map.Add "a", 1
map.Add "b", 2
...

可以这样使用:

>>> <b>WScript.Echo 地图("a")</b>
1个
>>> <b>WScript.Echo 地图("b")</b>
2

第 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"))