2010-06-16 49 views
0

我有兩個逗號分隔的列表: -逗號的經典ASP比較分開列出

36,189,47,183,65,50 

65,50,189,47 

的問題是如何在兩個比較經典的ASP,以確定和返回中存在的列表1的任何值,但這在列表2中不存在,因爲關聯數組不可用。

例如,在上面的例子中我需要的返回值是36,183

由於

+0

沒有關於ASP的主意,但是正則表達式絕對不適合這份工作。 – 2010-06-16 12:25:40

+1

將字符串拆分爲數組並檢查array.indexOf或其等價物。正則表達式在這裏是不可以的。 – Amarghosh 2010-06-16 12:28:05

回答

0

像這樣(未測試):

str1 = "36,189,47,183,65,50" 
str2 = "65,50,189,47" 

arr1 = Split(str1, ",") 
arr2 = Split(str2, ",") 

for i = 0 to UBound(arr1) 
    found = false 
    for j = 0 to UBound(arr2) 
     if arr1(i) = arr2(j) then 
     found = true 
     end if 
    next 
    if found = false then 
     Response.Write(arr1(i)) 
    end if 
next 
+0

感謝您的所有建議。這兩種方法都不適合我。我通過將列表傳遞給SQL存儲過程並填充了幾個臨時表,從中可以選擇唯一值並將結果插入到另一個表中,從而解決了問題。這始終是任務的終點,所以在SQL中而不是在代碼中執行它並沒有太大的損失,然後將返回值傳遞給數據庫。 乾杯 – Reiwoldt 2010-06-17 12:42:36

0

爲了與正則表達式解決這個您可以使用lookahead(正面和負面)和參考,例如:

(zyx:~) % echo '36,189,47,183,65,50;65,50,189,47' | grep -oP '((?>(?<![^,;])[^,;]+))(?=.*;)(?!.*;(|.*,)\1(?=,|$))' 
36 
183 

其他變種(工作在PCRE但不是在Perl):

(zyx:~) % echo '36,189,47,183,65,50' | grep -oP '((?!(?<=,|^)65|50|189|47(?=,|$))(?<=,|^)[^,]+(?=,|$))' 
36 
183 

不知道是否有任何這些作品的ASP。

0

VBScript具有Dictionary對象形式的關聯數組。

Dim list1, list2 
list1 = "36,189,47,183,65,50" 
list2 = "65,50,189,47" 

Dim arr1, arr2 
arr1 = Split(list1, ",") 
arr2 = Split(list2, ",") 

' oDict will hold values from list1 
Dim oDict, i 
Set oDict = Server.CreateObject("Scripting.Dictionary") 

For i = 0 To UBound(arr1) 
    oDict(arr1(i)) = 1 
Next 

' Now loop through list2 and remove matching items from list1 
For i = 0 To UBound(arr2) 
    If oDict.Exists(arr2(i)) Then 
     oDict.Remove arr2(i) 
    End If 
Next 

Response.Write Join(oDict.Keys, ",") ' should be "36,183"