将字符转换为数字

时间:2015-01-02 10:02:13

标签: vbscript converter

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

我用来执行此操作的当前方法是使用单独的:

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

然而,这种方法是一项繁琐的工作,并且似乎也有点低效(就通过它运行连续/大量字母而言)。是否有任何函数,子等可用于在VBScript中执行此类操作(特别是在VB Express 2010中)?

2 个答案:

答案 0 :(得分:1)

如有疑问,请阅读documentationAsc()函数返回给定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"))