所以我对编码很陌生,特别是在Vbscript中,所以我一直在搞乱,试图通过实践来学习。所以我一直在研究一个小程序,它将使用用户名(如计算机用户名),加上字母,并根据总和侮辱用户,因为为什么不。我一直在第10行上遇到错误,并且由于我的代码设置方式,我很确定我也会在每个后续行上遇到它。你能帮我么?我一直收到错误代码 800A01B6“对象不支持此属性或方法。” (因为使用的语言,我删除了侮辱,不要担心...)
express-fileupload
如果您还可以向我提供有关如何使此代码更高效或更好结构化的提示,我将不胜感激!感谢您抽出宝贵时间阅读本文以及您给我的任何帮助。
答案 0 :(得分:2)
InStr
仅适用于 String
,并且在您的代码中使用 Object
,因此得到错误。替换你的行:
if InStr(1, networkInfo, "a") > 0 Then
使用:
if InStr(1, infoStr, "a") > 0 Then
也可以使用Select...Case
代替 If and ElseIf
。
答案 1 :(得分:1)
@manishchristian有answered the initial question。
但是,根据您尝试根据用户名生成数值的代码判断。目前,您编写的代码无法按预期工作,因为您没有代码可以循环访问并检查所有条件。
这段代码也非常重复和繁琐,这打破了编程中的一个关键原则,DRY (Don't Repeat Yourself)。
以下只是解决此问题的众多方法之一。该方法使用嵌套数组来设置与其关联的字符和数值(可通过更改值轻松配置)。然后循环遍历用户名中的每个字符,并将逻辑应用于一行而不是笨拙的If
语句。
旁注: 如果letters
数组始终遵循相同的模式,那么没有什么可以阻止您动态构建,即使代码更少的
Option Explicit
Dim i, nameVal
Dim netinfo: Set netinfo = CreateObject("WScript.Network")
Dim username: username = netinfo.UserName
Dim letter
Dim letters: letters = Array( _
Array("a", 1), Array("b", 2), Array("c", 3), Array("d", 4), Array("e", 5) _
, Array("f", 6), Array("g", 7), Array("h", 8), Array("i", 9), Array("j", 10) _
, Array("k", 11), Array("l", 12), Array("m", 13), Array("n", 14), Array("o", 15) _
, Array("p", 16), Array("q", 17), Array("r", 18), Array("s", 19), Array("t", 20) _
, Array("u", 21), Array("v", 22), Array("w", 23), Array("x", 24), Array("y", 25) _
, Array("z", 26))
For i = 1 To Len(username)
For Each letter In letters
If LCase(Mid(username, i, 1)) = LCase(letter(0)) Then nameVal = nameVal + letter(1)
Next
Next
WScript.Echo username & " = " & nameVal
输出:
Joe.Bloggs = 92