vbscript中的“预期声明”

时间:2012-02-20 02:55:31

标签: vbscript

我是vbscript的新手。我收到了错误

  

get_html预期的声明

在我的代码的底部。我实际上是在尝试为变量get_html声明一个值(这是一个url)。我该如何解决这个问题?

Module Module1

Sub Main()

End Sub
Sub get_html(ByVal up_http, ByVal down_http)
    Dim xmlhttp : xmlhttp = CreateObject("msxml2.xmlhttp.3.0")
    xmlhttp.open("get", up_http, False)
    xmlhttp.send()

    Dim fso : fso = CreateObject("scripting.filesystemobject")

    Dim newfile : newfile = fso.createtextfile(down_http, True)
    newfile.write(xmlhttp.responseText)

    newfile.close()

    newfile = Nothing
    xmlhttp = Nothing

End Sub
get_html _"http://www.somwwebsite.com", _"c:\downloads\website.html"

End Module

2 个答案:

答案 0 :(得分:4)

有一些语法错误。

  • 模块声明不属于VBScript
  • 下划线会导致意外结果。请参阅http://technet.microsoft.com/en-us/library/ee198844.aspx(在页面上搜索underscore一词)
  • 调用Sub 时不能使用括号(例如xmlhttp.open是子,不返回任何内容)。调用子例程有两种主要的替代方法。 sub_proc param1, param2Call sub_proc(param1, param2)
  • 赋值运算符“=”对于对象来说还不够。你应该 使用Set语句。它为对象分配对象引用 变量

响应可能以utf-8编码返回。但是,FSO与utf-8并不和谐。另一种选择是将响应写为unicode(将True作为第三个参数传递给CreateTextFile)    但输出尺寸将大于应有的尺寸。因此,我更愿意使用Stream对象 我修改了你的代码。请考虑。

'Requeired Constants
Const adSaveCreateNotExist = 1 'only creates if not exists
Const adSaveCreateOverWrite = 2 'overwrites or creates if not exists
Const adTypeBinary = 1

Sub get_html(ByVal up_http, ByVal down_http)
    Dim xmlhttp, varBody
    Set xmlhttp = CreateObject("msxml2.xmlhttp.3.0")
        xmlhttp.open "GET", up_http, False
        xmlhttp.send
        varBody = xmlhttp.responseBody
    Set xmlhttp = Nothing
    Dim str
    Set str = CreateObject("Adodb.Stream")
        str.Type = adTypeBinary
        str.Open
        str.Write varBody
        str.SaveToFile down_http, adSaveCreateOverWrite
        str.Close
    Set str = Nothing
End Sub

get_html "http://stackoverflow.com", "c:\downloads\website.html"

答案 1 :(得分:1)

您可能希望将来自get_html的来电转移到Main子例程(Sub Main())中。例如:

Sub Main()
  get_html _"http://www.somwwebsite.com", _"c:\downloads\website.html"
End Sub

AFAIK,您无法直接在模块内进行函数调用。