Ake's corner

VBScript + WSH by examples

Little intro: Visual Basic Script is a one of Visual Basic dialects developed/used by Microsoft. It comes with any modern Windows and in complex with Windows Scripting Host (which giving access to some system APIs) was added to code some automation stuff and replace old quirky less-programs-than-unix-shell .bat-files and later was substituted (I think) by Powershell.

Back in a days, you know, vbscript was also used in IE (when it was common, of course) just like JS (MS used their super/sub-set called JScript). And it was there, when XMLHttpRequest has appeared, so we have ability to do HTTP requests from vbs.

This example fetches json and extracts quoted strings (I'm too dumb for real parser)

Dim response Dim mode Dim start mode = 0 Set xhr = CreateObject("MSXML2.XMLHTTP") xhr.open "GET", "https://example.com/uri_givin_me_json", False xhr.send response = xhr.responseText i = 1 While i < Len(response) char = Mid(response, i, 1) Select case char Case """" If mode = 0 Then mode = 1 start = i + 1 Else WScript.StdOut.Write(Mid(response, start, i - start)) & vbcrlf mode = 0 End If Case "\" i = i + 1 End Select i = i + 1 Wend

Another fact about vbs is that it doesn't have (or i haven't found) primitive dictionary/map structure and dynamic arrays. This example parses urlencoded form (not in php compliant way) and produces Scripting.Dictionary object

Function UELoad(s) Set retval = CreateObject("Scripting.Dictionary") pairs = Split(s, "&") For Each p in pairs kv = Split(p, "=") If retval.Exists(kv(0)) Then If VarType(retval.Item(kv(0))) = vbString Then a = array(2) a(0) = retval.Item(kv(0)) a(1) = kv(1) retval.Key(kv(0)) = a Else a = retval.Item(kv(0)) n = UBound(a) ReDim Preserve a(n + 1) 'resizing array, who has said "realloc" a(n) = kv(1) retval.Key(kv(0)) = a End If Else retval.Add kv(0), kv(1) End If Next Set UELoad = retval 'weird a bit, must assign return value to function name End Function Set x = UELoad("foo=1&bar=2") WScript.Echo x.Item("foo")