Zwei Sätze von Zeichenfolgendaten müssen dieselben Daten vergleichen und ihre Werte addieren, um neue Zeichenfolgendaten zu bilden a1=sp2=20;sp1=34;
a2=sp3=2;sp2=3;sp1=4;
Fügen Sie zwei Zeichenfolgendatensätze in der Zeichenfolge hinzu, um einen neuen Datensatz zu erhalten.
Das heißt, sp3=2;sp2=23;sp1=38
(ps Eine einfache Anwendung: Die ursprüngliche Menge von Produkt 2 beträgt 20 Stück, die ursprüngliche Menge von Produkt 1 beträgt 34 Stück, neu gekaufte oder neu verkaufte 3 Stück von Produkt 2, 4 Stück von Produkt 1 usw. werden zur Berechnung simuliert Einkaufsvolumen und Verkaufsvolumen und Lagerbestand, ein kleines Einkaufs-, Verkaufs- und Lagersystem kann diese Methode verwenden)
Wie kann man also zwei Sätze von Zeichenfolgendaten mit denselben Daten vergleichen und zusammenführen?
Verbinden und kombinieren Sie zunächst die beiden String-Datensätze
a3=a1&a2
Dann a3=sp2=20;sp1=34;sp3=2;sp2=3;sp1=4;
Zweitens fügen Sie die gleichen Daten in a3 hinzu
Die Hauptlösung hier besteht darin, dieselben Daten zu finden
Da a3 jetzt aus sp2, sp1, sp3, sp2 und sp1 besteht, ist es zunächst erforderlich, dasselbe sp2 und sp1 separat zu finden und dann die Werte zu addieren.
Durch Aufteilungsfunktion aufteilen; jedes Datenelement und jeden Wert als Trennzeichen abrufen.
Das heißt, s_array = split(a3,;) durch for i = 0 to ubound(s_array) Schleife können wir einzelne Daten und Werte erhalten
Das Format jedes Elements ähnelt sp2 = 20. Sp2 muss extrahiert werden, um es mit den Daten in derselben Gruppe zu vergleichen. Daher ist eine unabhängige Funktion zum Extrahieren erforderlich.
Funktion getSPName(sp)
getSPName = split(sp,=)(0)
Funktion beenden
Funktion getSPNum(sp)
getSPNum = split(sp,=)(1)
Endfunktion
Holen Sie sich den Datennamen vor = bzw. den Datenwert nach =.
Zweitens wird jedes Datenelement zerlegt, dh wie derselbe Datenname gefunden wird.
Wir gehen von einem solchen Prozess aus: Extrahieren Sie zuerst das erste Element im a3-Array, vergleichen Sie es mit den Daten, bevor Sie das erste Element teilen, und fügen Sie es hinzu, wenn sie gleich sind.
s_array = split(a3,;)
für i = 0 bis ubound(s_array)
für j=i+1 bis ubound(s_array)
wenn getSPName(s_array(i)) = getSPName(s_array(j)) dann
Nums = Nums + Cint(getSPNum(s_array(j)))
Ende wenn
nächste
nächste
Wir haben den endgültigen Wert erhalten und können ihn jederzeit einem neuen dynamischen Array zuweisen, um das endgültige kombinierte Datenarray zu bilden.
redim Ergebnis beibehalten(p)
result(p) = getSPName(s_array(i)) & = & Nums
Im Augenblick
s_array = split(a3,;)
für i = 0 bis ubound(s_array)
für j=i+1 bis ubound(s_array)
wenn getSPName(s_array(i)) = getSPName(s_array(j)) dann
Nums = Nums + Cint(getSPNum(s_array(j)))
Ende wenn
nächste
redim Ergebnis beibehalten(p)
result(p) = getSPName(s_array(i)) & = & Nums
p=p+1
nächste
Dies wird zwangsläufig auf eine Situation wie diese stoßen: Wenn ein nachfolgendes Element im a3-Array immer mit demselben zuvor verglichenen Element bearbeitet wird, kann dieses Element daher nicht in for i = 0 bis ubound(s_array) innerhalb von result(p) einbezogen werden. = getSPName(s_array(i)) & = & Nums dynamisches Array.
So lösen Sie das Problem, dass bereits verglichene Elemente nicht mehr verglichen werden können
Wir müssen die verglichenen Elemente markieren, beispielsweise im a3-Array (a3=sp2=20;sp1=34;sp3=2;sp2=3;sp1=4;), nachdem wir sp2=20 herausgenommen haben Der Vorgang endet mit einem sp2 = 3. Zu diesem Zeitpunkt wird die Array-Elementnummer von sp2 = 3 nach dem Vergleichsvorgang markiert und dieses Element wird beim nächsten Schleifenvergleich nicht gezählt.
s_array = split(a3,;)
für i = 0 bis ubound(s_array)
für j=i+1 bis ubound(s_array)
wenn getSPName(s_array(i)) = getSPName(s_array(j)) dann
Nums = Nums + Cint(getSPNum(s_array(j)))
Ende wenn
redim Preserve ID(q)
ID(q) = j
q = q + 1
nächste
redim Ergebnis beibehalten(p)
result(p) = getSPName(s_array(i)) & = & Nums
p=p+1
nächste
Die Definition von ID(q)=j besteht darin, das aktuell gleiche Element zu markieren und es dem dynamischen Array id(q) zuzuweisen. q ist standardmäßig als 0 definiert und q=q+1 wird erneut wiederholt.
Mit dieser Markierung können wir dann gezielt vergleichen und akkumulieren.
Funktion definieren
functionIsInID(j)
dimmen x
IsInID = false
für jedes x in ID
wenn x = j dann
IsInID = true
Exit-Funktion
Beenden Sie, wenn
Nächste
Endfunktion
Die Hauptfunktion ist
Funktion mainhb(s)
s_array = split(s,;)
für i = 0 bis ubound(s_array)
wenn nicht IsInID(i), dann
Nums = getSPNum(s_array(i))
für j=i+1 bis ubound(s_array)
wenn getSPName(s_array(i)) = getSPName(s_array(j)) dann
Nums = Nums + Cint(getSPNum(s_array(j)))
redim Preserve ID(q)
ID(q) = j
q = q + 1
Ende wenn
nächste
redim Ergebnis beibehalten(p)
result(p) = getSPName(s_array(i)) & = & Nums
p = p + 1
Ende wenn
nächste
für jedes x im Ergebnis
mainhb=mainhb&x&;
nächste
Endfunktion
Die Gesamtfunktion ist
<%
Ergebnis dimmen()
dimID()
dim p , q , Nums
p=0
q= 0
Zahlen = 0
redim Preserve ID(q)
ID(q) =
s = sp4=33;sp2=20;sp1=34;sp3=2;sp2=3;sp4=4;
s = left(s,len(s)-1)
Response.write Mainhb(s)
Funktion mainhb(s)
s_array = split(s,;)
für i = 0 bis ubound(s_array)
wenn nicht IsInID(i), dann
Nums = getSPNum(s_array(i))
für j=i+1 bis ubound(s_array)
wenn getSPName(s_array(i)) = getSPName(s_array(j)) dann
Nums = Nums + Cint(getSPNum(s_array(j)))
redim Preserve ID(q)
ID(q) = j
q = q + 1
Ende wenn
nächste
redim Ergebnis beibehalten(p)
result(p) = getSPName(s_array(i)) & = & Nums
p = p + 1
Ende wenn
'Zahlen = 0
nächste
für jedes x im Ergebnis
mainhb=mainhb&x&;
nächste
Endfunktion
Funktion getSPName(sp)
getSPName = split(sp,=)(0)
Funktion beenden
Funktion getSPNum(sp)
getSPNum = split(sp,=)(1)
Endfunktion
functionIsInID(j)
dimmen x
IsInID = false
für jedes x in ID
wenn x = j dann
IsInID = wahr
Exit-Funktion
Beenden Sie, wenn
Nächste
Endfunktion
%>