我有兩個逗號分隔的列表: -逗號的經典ASP比較分開列出
36,189,47,183,65,50
65,50,189,47
的問題是如何在兩個比較經典的ASP,以確定和返回中存在的列表1的任何值,但這在列表2中不存在,因爲關聯數組不可用。
例如,在上面的例子中我需要的返回值是36,183
由於
我有兩個逗號分隔的列表: -逗號的經典ASP比較分開列出
36,189,47,183,65,50
65,50,189,47
的問題是如何在兩個比較經典的ASP,以確定和返回中存在的列表1的任何值,但這在列表2中不存在,因爲關聯數組不可用。
例如,在上面的例子中我需要的返回值是36,183
由於
像這樣(未測試):
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
感謝您的所有建議。這兩種方法都不適合我。我通過將列表傳遞給SQL存儲過程並填充了幾個臨時表,從中可以選擇唯一值並將結果插入到另一個表中,從而解決了問題。這始終是任務的終點,所以在SQL中而不是在代碼中執行它並沒有太大的損失,然後將返回值傳遞給數據庫。 乾杯 – Reiwoldt 2010-06-17 12:42:36
爲了與正則表達式解決這個您可以使用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。
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"
沒有關於ASP的主意,但是正則表達式絕對不適合這份工作。 – 2010-06-16 12:25:40
將字符串拆分爲數組並檢查array.indexOf或其等價物。正則表達式在這裏是不可以的。 – Amarghosh 2010-06-16 12:28:05