使用 RegExp 将输入 (sInp) 拆分为键值部分,并将这些部分替换为从所需输出 (sExp) 派生的模板 (sTmpl):
Option Explicit
' 1 2 3 4 5 6
Dim sInp : sInp = "Y157019=1&Y013759=2&Y032231=5"
Dim sExp : sExp = "Update TABLEX SET Status='1' WHERE Ticket= 'Y157019'; Update TABLEX SET Status='2' WHERE Ticket= 'Y013759'; Update TABLEX SET Status='5' WHERE Ticket= 'Y032231';"
Dim sTmpl : sTmpl = Join(Array( _
"Update TABLEX SET Status='$2' WHERE Ticket= '$1'" _
, "Update TABLEX SET Status='$4' WHERE Ticket= '$3'" _
, "Update TABLEX SET Status='$6' WHERE Ticket= '$5';" _
), "; ")
Dim reRpl : Set reRpl = New RegExp
reRpl.Pattern = "^([^=]+)=(\d+)&([^=]+)=(\d+)&([^=]+)=(\d+)$"
Dim sAct : sAct = reRpl.Replace(sInp, sTmpl)
WScript.Echo sExp
WScript.Echo sAct
WScript.Echo CStr(sAct = sExp)
输出:
cscript 31453580.vbs
更新 TABLEX SET Status='1' WHERE Ticket='Y157019';更新 TABLEX SET Status='2' WHERE Ticket='Y013759';更新 TABLEX SET Status='5' WHERE Ticket='Y032231';
更新 TABLEX SET Status='1' WHERE Ticket='Y157019';更新 TABLEX SET Status='2' WHERE Ticket='Y013759';更新 TABLEX SET Status='5' WHERE Ticket='Y032231';
真的
适应变化的规格:
Option Explicit
Dim aTests : aTests = Array( _
"Y157019=1&Y013759=2&Y032231=5" _
, "Y157019=1&Y013759=2" _
, "Y157019=1" _
, "" _
)
Dim reRpl : Set reRpl = New RegExp
reRpl.Global = True
reRpl.Pattern = "([^=]+)=(\d+)"
Dim sInp
For Each sInp In aTests
WScript.Echo "----", sInp
Dim oMts : Set oMts = reRpl.Execute(sInp)
Dim sAct
If 0 < oMts.Count Then
ReDim aTmp(oMTS.Count - 1)
Dim i
For i = 0 To UBound(aTmp)
aTmp(i) = reRpl.Replace(oMTS(i).Value, "Update TABLEX SET Status='$2' WHERE Ticket= '$1'")
Next
sAct = Join(aTmp, "; ") & ";"
Else
sAct = "no match"
End If
WScript.Echo sAct
Next
输出:
cscript 31453580-2.vbs
---- Y157019=1&Y013759=2&Y032231=5
更新 TABLEX SET Status='1' WHERE Ticket='Y157019';更新 TABLEX SET Status='2' WHERE Ticket='&Y013759';更新 TABLEX SET Status='5' WHERE Ticket='&Y032231';
---- Y157019=1&Y013759=2
更新 TABLEX SET Status='1' WHERE Ticket='Y157019';更新 TABLEX SET Status='2' WHERE Ticket='&Y013759';
---- Y157019=1
更新 TABLEX SET Status='1' WHERE Ticket='Y157019';
----
不匹配