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