Классическое сравнение ASP через запятую списки - PullRequest
0 голосов
/ 16 июня 2010

У меня есть два списка, разделенных запятыми: -

36,189,47,183,65,50

65,50,189,47

Вопрос в том, как сравнить два в классическом ASP, чтобы идентифицировать и вернуть любые значения, которые существуют в списке 1, но которые не существуют в списке 2, имея в виду, что ассоциативные массивы недоступны.

Например, в приведенном выше примере мне нужно, чтобы возвращаемое значение было 36,183

Спасибо

Ответы [ 3 ]

0 голосов
/ 16 июня 2010

Чтобы решить эту проблему с помощью регулярного выражения, вы можете использовать прогнозные (как положительные, так и отрицательные) и ссылки, например:

(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 голосов
/ 30 ноября 2011

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"
0 голосов
/ 16 июня 2010

Примерно так (не проверено):

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
...