【问题标题】:Convert string to variable name in VBScript在VBScript中将字符串转换为变量名
【发布时间】:2018-05-21 07:43:05
【问题描述】:

如何在 VBscript 中将字符串转换为变量名?我为JavaScriptC#PytonPerlRubyJava 找到了类似的 Q/A,但不适用于 VBscript。

这就是为什么我不能直接使用变量而不是字符串:

有一个逗号分隔的权限列表 names 我从网络服务获得。项目经理可能会随时更新此列表,并希望我检查软件用户是否被授予这些权限。用户的权限是在运行时通过复杂的方法以及配置文件数据、软件中的活动历史等设置的。如果用户购买了 1000 件产品,变量 SuperCustomerPermission 将使用 SuperCustomerPermission="yes" 在页面标题中为他设置(不是 cookie 或会话,也不是存储在数据库中)。

要检查权限列表,我想将权限列表 names 传递给函数并遍历名称:

我从网络服务获得的权限名称:

permissionNames = "adminPermission,deletePermission,configPermission,SuperCustomerPermission"

我尝试将这些字符串作为变量传递给子程序:

Sub checkPermission(PermissionNames)
    permissionNamesArray = split(permissionNames,",",-1,1)
    For Each x In permissionNamesArray
        'How to convert x to its variable equivalent and check if it equals "yes"
    Next
End Sub

Call checkPermission(permissionNames)

【问题讨论】:

  • 为什么你认为你需要打电话给checkPermission("adminPermission")而不是打电话给checkPermission(adminPermission)?那个字符串是从哪里来的?您这样做要解决的实际问题是什么?
  • 我添加了更多细节,说明为什么我不能使用变量而不是字符串。 @AnsgarWiechers
  • 除了 Array 函数不会将逗号分隔的字符串转换为数组之外,您还没有解释为什么您认为需要将权限名称字符串更改为同名。请再退后两步,描述您要解决的实际问题,而不是您认为的解决方案。你想用这些权限/变量来完成什么? permissionNames 是您的参考资料(您从数据库中获得的信息),还是您想与参考资料进行比较?
  • 你能像 Jacob M. 建议的那样使用字典吗(例如 permissions("SuperCustomerPermissions") = "yes")?然后你可以简单地循环检查permissions(x) = "yes"。否则你将不得不求助于EvalExecute,这是不推荐的。
  • 不,我不会。抱歉,但我不会帮你打你自己的脚。

标签: vbscript asp-classic type-conversion


【解决方案1】:

如果可以将其放入应用程序或会话中,您可以执行session(variableName) = 5 之类的操作。

如果没有,下一个最简单的方法是使用字典:

Dim myDict
Set myDict= CreateObject("Scripting.Dictionary")
myDict.Add (variableName, value)

【讨论】:

  • 字典对象将是我的首选。如果你想这样做,我很确定你也可以在 Session 变量中放置一个字典对象。
  • 谢谢。如果没有人使用evalexecute 提出更好的解决方案,我将赎回赏金。
【解决方案2】:

使用字典应该可以很好地适应您的情况,而且更简洁。

话虽如此,既然您要求Execute 解决方案,您可以这样做:

Sub checkPermission(PermissionNames)
    Dim permissionNamesArray, x

    permissionNamesArray = split(permissionNames,",",-1,1)
    For Each x In permissionNamesArray
        Dim valueOfX
        Execute "valueOfX = " & x
        WScript.Echo valueOfX
    Next
End Sub

使用示例:

' Adding some values to the variables
Dim adminPermission, deletePermission, configPermission, SuperCustomerPermission
adminPermission = "yes"
deletePermission = "no"
configPermission = "yes"
SuperCustomerPermission = "no"

' Storing names of variables
Dim permissionNames
permissionNames = "adminPermission,deletePermission,configPermission,SuperCustomerPermission"

' Passing variables by names
checkPermission(permissionNames)

输出:

是的
没有
是的
没有

【讨论】:

    猜你喜欢
    • 2011-08-27
    • 2010-12-04
    • 2011-03-24
    • 2020-04-14
    • 2011-08-02
    • 2016-04-26
    • 1970-01-01
    相关资源
    最近更新 更多