从经典asp中删除字符串中的重复值

时间:2016-11-04 19:06:20

标签: vbscript asp-classic

我在经典asp

中有以下代码
 str=Request.Form("txt_str")

“txt_str”是经典asp表单页面中的文本框,我在其中输入以下值:
000-00001
000-00001
000-00001
000-00002

response.write str

因此str将为000-00001 000-00001 000-00001 000-00002

array = split(str,Chr(44))  

if str <> "" then
    x=empty
    for i = 0 to ubound(array) 
        if array(i) <> "" then
            array_2 = split(array(i),chr(13) & chr(10))  
            for j = 0 to ubound(array_2)
                if array_2(j) <> "" then
                    if x=empty then

                        x=  "'" & array_2(j) & "'"
                    else
                        x= x & ",'"  & array_2(j) & "'"
                    end if
                end if
            next
        end if
    next
End if

response.write x

因此x将返回'000-00001','000-00001','000-00001','000-00002'

我想从x中删除重复值并仅将其显示为:

x ='000-00001','000-00002'

我如何实现这一点。对此的任何帮助将不胜感激。 感谢

2 个答案:

答案 0 :(得分:2)

要删除字符串列表的重复项,IMO的最佳选择是使用Dictionary对象。您可以使用此简短函数在给定的字符串数组上执行任务:

    Function getUniqueItems(arrItems)
        Dim objDict, strItem

        Set objDict = Server.CreateObject("Scripting.Dictionary")

        For Each strItem in arrItems
            objDict.Item(strItem) = 1
        Next

        getUniqueItems = objDict.Keys
    End Function

一个简单的测试:

    ' -- test output
    Dim arrItems, strItem

    arrItems = Array("a","b","b","c","c","c","d","e","e","e")

    For Each strItem in getUniqueItems(arrItems)
        Response.Write "<p>" & strItem & "</p>"
    Next

这是您的用例示例:

    ' -- sample for your use case
    Dim strInput, x

    strInput = Request.Form("txt_str")
    x = "'" & join(getUniqueItems(split(str, Chr(44))), "','") & "'"

顺便说一下,您是否注意到ArrayStr是VBScript关键字,因此您可能会遇到使用此类变量名称的问题。因此,我认为在VBScript中使用变量名前缀是常见的做法。

答案 1 :(得分:0)

如果它是有序列表,请考虑使用带有最后一个值的变量:

lastval = ""
array = split(str,Chr(44))  

if str <> "" then
    x=empty
    for i = 0 to ubound(array) 
        if array(i) <> "" then
            array_2 = split(array(i),chr(13) & chr(10))  
            for j = 0 to ubound(array_2)
                if array_2(j) <> "" then
                    if array_2(j) <> lastval then                          
                       lastval = array_2(j) 
                       if x=empty then
                           x=  "'" & array_2(j) & "'"
                       else
                           x= x & ",'"  & array_2(j) & "'"
                       end if
                    end if
                end if
            next
        end if
    next
End if