如何使用VBScript在该字符串的静态位置显示该字符串的一部分?

如何使用VBScript在该字符串的静态位置显示该字符串的一部分?,vbscript,asp-classic,Vbscript,Asp Classic,我有一个用VBScript从数据库中获取的列表(…表示有另一个代码) 如何使用VBScript在每个x中仅显示EventTitle BackToSchool 2015年夏季大甩卖 示例事件标题 事件的测试标题 如果您的数据是一致的(总是六个逗号分隔的键=值对,在键=值对中不存在逗号,等等),那么您可以只拆分逗号上的字符串以获得键=值对,然后拆分=上的第五个键=值对以仅获得值 例如: For Each x In rs.Fields kv = Split(x, ",")

我有一个用VBScript从数据库中获取的列表(…表示有另一个代码)

如何使用VBScript在每个
x
中仅显示EventTitle

BackToSchool
2015年夏季大甩卖
示例事件标题
事件的测试标题

如果您的数据是一致的(总是六个逗号分隔的
键=值
对,在
键=值
对中不存在逗号,等等),那么您可以只拆分逗号上的字符串以获得
键=值
对,然后拆分
=
上的第五个
键=值
对以仅获得值

例如:

For Each x In rs.Fields
    kv = Split(x, ",")                   ' Get key=value pairs
    Response.Write Split(kv(4), "=")(1)  ' Output the value of the 5th pair
    Response.Write "<br>"
Next
rs.字段中每个x的

kv=拆分(x,“,”)获取键=值对
响应。写入拆分(kv(4),“=”(1)”输出第5对的值
响应。写入“
” 下一个
虽然可能适用于特定情况,但它不是很优雅,我更喜欢使用更通用的方法,即使用Dictionary对象

方法是:

Function ParseData(rawString, mainDelimeter, subDelimeter)
    Dim oData, x, y
    Dim arrMainParts, arrSubParts
    Dim currentKey, currentValue
    Set oData = CreateObject("Scripting.Dictionary")
    arrMainParts = Split(rawString, mainDelimeter)
    For x=0 To UBound(arrMainParts)
        arrSubParts = Split(arrMainParts(x), subDelimeter)
        If UBound(arrSubParts)>0 Then
            currentKey = arrSubParts(0)
            currentValue = arrSubParts(1)
            If oData.Exists(currentKey) Then
                oData(currentKey) = currentValue
            Else  
                oData.Add currentKey, currentValue
            End If
        End If
        Erase arrSubParts
    Next
    Erase arrMainParts
    Set ParseData = oData
End Function
在这种特定情况下的用法是:

For Each x In rs.Fields
    Set oData = ParseData(x, ",", "=")
    If oData.Exists("EventTitle") Then
        Response.Write(oData("EventTitle") & "<br />")
    End If
    Set oData = Nothing
Next
rs.字段中每个x的

设置oData=ParseData(x,“,”,“=”)
如果oData.存在(“EventTitle”),则
响应。写入(oData(“EventTitle”)和“
”) 如果结束 设置oData=Nothing 下一个
为了指出另一种方法,您可以尝试使用
仪器,也可以

正如Bond所说,您的CSV列表是一致的,所以您应该能够使用类似这样的内容进行查找

(请注意,以下内容取决于您指定的格式,因此如果在逗号或等号之间添加空格,则会出现问题。)

Const cDelim=“,”
Const cEqual=“=”
函数GetItemValueFromList(plist,itemName)
Dim ip'项目指针
“Dim ep”等于符号指针
暗pl,ni
pl=cDelim和plist
ni=cDelim&itemName&cEqual
ip=仪表(pl,ni)
“在尝试提取价值之前,确保我们找到了一些东西。。。
如果ip>0,则
ep=仪表板(ip+1,pl,cEqual)
GetItemValueFromList=Mid(pl,ep+1,仪表板(ep+1,pl,cDelim)-ep-1)
其他的
GetItemValueFromList=“”
如果结束
端函数

感谢Ekkehard.Horner指出了一个明显的问题——我在编写代码时显然有一个高级时刻。

您的记录集模式是什么?这并不重要,我在编写字符串时遇到了问题,我必须做的是只在=(在本例中是EventTitle)之后获取字符串,(一)搜索目标应该是“EventTitle=”@Ekkehard.Horner:当然。我只是想让我的代码更灵活一点。每个项目中都有多个名称-值对,说明OP不希望在完全不同的列表中使用代码。如果允许更改,则对于前缀为“EventTitle”的关键字,策略/代码将失败(无声!)。给定固定的关键字,额外搜索“=”是个坏主意。@Ekkehard.Horner:True。我会调整我的答案。
For Each x In rs.Fields
    Set oData = ParseData(x, ",", "=")
    If oData.Exists("EventTitle") Then
        Response.Write(oData("EventTitle") & "<br />")
    End If
    Set oData = Nothing
Next