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