«Объявление ожидается» в VBScript - PullRequest
0 голосов
/ 20 февраля 2012

Я новичок в VBScript. Я получаю ошибку

Объявление ожидается в get_html

В нижней части моего кода. Я на самом деле пытаюсь объявить значение (которое является URL) для переменной get_html. Как я могу решить эту проблему?

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 ]

4 голосов
/ 20 февраля 2012

Есть некоторые синтаксические ошибки.

  • Оператор модуля не является частью VBScript .
  • Подчеркивание может привести к неожиданным результатам.См. http://technet.microsoft.com/en-us/library/ee198844.aspx (поиск слова underscore на странице)
  • Вы не можете использовать круглые скобки при вызове Sub (например, xmlhttp.open является подпрограммой, ничего не возвращает) .У вас есть две основные альтернативы вызову подпрограммы.sub_proc param1, param2 или Call sub_proc(param1, param2)
  • Оператора присваивания '=' недостаточно для объектов.Вы должны использовать оператор Set .Он назначает объектные ссылки на переменные.

Ответ может возвращаться в кодировке utf-8.Но ФСО не в мире с 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 голос
/ 20 февраля 2012

Возможно, вы хотите переместить ваш вызов на get_html, чтобы он был вызовом из вашей подпрограммы Main (Sub Main()).Например:

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

AFAIK, вы не можете выполнять вызовы функций непосредственно из модуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...