2016-05-04 9 views

Antwort

1

Dies ist kein straight forward Problem, das ich fand, dass mein Ich dachte ein paar Minuten darüber nach, bevor ich schließlich darüber nachdachte, wie ich es machen könnte.

Um die Ausgabe der angegebenen Eingabe zu erzeugen, ist eine Art von De-Serialisierung/Serialisierung erforderlich. Der folgende Code erstellt ein 2D-Array mit den eindeutigen Indizes (58, 59 usw.) und füllt sie mit einer durch Kommas getrennten Liste der zugehörigen Werte (so gemacht, dass die Serialisierung einfach wird).

Struktur weise wird es in etwa so aussehen, wenn deserialisiert

----- Array Debug ------ 
data(0, 0) = 58 
data(1, 0) = 270,271,272 
data(0, 1) = 59 
data(1, 1) = 270,271,272 

Wir verwenden dann, dass als Grundlage die serialisierte Zeichenfolge im Format erforderlich zu bauen.

'Function takes string input in the form <index>|<value>, ... extracts 
'them into a 2D array groups duplicate indexes together. 
Function DeserialiseToCustomArray(str) 
    Dim a1, a2, x, y, idx 
    If Len(str & "") > 0 Then 
    a1 = Split(str, ",") 
    ReDim data(1, 0) 
    For x = 0 To UBound(a1) 
     a2 = Split(a1(x), "|") 
     If IsArray(data) Then 
     idx = -1 
     'Check for duplicates 
     For y = 0 To UBound(data, 2) 
      If data(0, y) = a2(0) Or IsEmpty(data(0, y)) Then 
      idx = y 
      Exit For 
      End If 
     Next 

     'No duplicate found need to add a new element to the array. 
     If idx = -1 Then 
      idx = UBound(data, 2) + 1 
      ReDim Preserve data(1, idx) 
     End If 
     data(0, idx) = a2(0) 
     If IsEmpty(data(1, idx)) Then 
      data(1, idx) = a2(1) 
     Else 
      data(1, idx) = Join(Array(data(1, idx), a2(1)), ",") 
     End If 
     End If 
    Next 
    End If 
    DeserialiseToCustomArray = data 
End Function 

'Function takes a 2D array built from DeserialiseToCustomArray() and 
'serialises it into a custom string in the form <index>,<value>, ... | ... 
Function SerialiseArray(data) 
    Dim x, y 
    Dim str: str = Empty 
    If IsArray(data) Then 
    For y = 0 To UBound(data, 2) 
     If y > 0 And y <= UBound(data, 2) Then str = str & "|" 
     str = str & data(0, y) & "," & data(1, y) 
    Next 
    End If 
    SerialiseArray = str 
End Function 

Paar Anwendungsbeispiele:

Dim str: str = "58|270,58|271,58|272,59|270,59|271,59|272" 
Dim data, result 

data = DeserialiseToCustomArray(str) 
result = SerialiseArray(data) 
WScript.Echo "input: " & str 
WScript.Echo "output: " & result 

Ausgang:

Result: 58,270,271,272|59,270,271,272 
Dim str: str = "58|270,58|271,58|272,59|270,59|271,59|272,60|345,61|345,58|270,60|200" 
Dim data, result 

data = DeserialiseToCustomArray(str) 
result = SerialiseArray(data) 
WScript.Echo "input: " & str 
WScript.Echo "output: " & result 

Ausgang:

Result: 58,270,271,272,270|59,270,271,272|60,345,200|61,345 

Hinweis: Wenn Sie diese Beispiele in Classic ASP verwenden, entfernen Sie die WScript.Echo und ersetzen Sie sie durch Response.Write.

+1

uh..thank Sie für nehmen Sie Ihre Zeit versuchen, mein Problem zu lösen..ich schätze es wirklich..das ist, was ich brauche..danke noch einmal ... – user2752718

0

Ein üblicher Weg, einzigartige Gegenstände zu bekommen aus einem Array zu setzen ist sie als Schlüssel in ein Dictionary:

a = Array(58, 270, 271, 272, 270, 271, 272) 

Set d = CreateObject("Scripting.Dictionary") 
For Each i In a 
    d(i) = True 'value can be anything, relevant is using i as key 
Next 

WScript.Echo Join(d.Keys, ",") 'Output: 58,270,271,272