Dos conjuntos de datos de cadena deben comparar los mismos datos y sumar sus valores para formar una nueva cadena de datos a1=sp2=20;sp1=34;
a2=sp3=2;sp2=3;sp1=4;
Dos conjuntos de datos de cadena. Agregue los mismos valores de datos en la cadena para obtener un nuevo conjunto de datos.
Es decir, sp3=2;sp2=23;sp1=38
(ps Una aplicación simple: la cantidad original del producto 2 es 20 piezas, la cantidad original del producto 1 es 34 piezas, se simulan 3 piezas recién compradas o vendidas del producto 2, 4 piezas del producto 1, etc. para calcular el volumen de compras y volumen de ventas e inventario, un pequeño sistema de compras, ventas e inventario puede utilizar este método)
Entonces, ¿cómo comparar y fusionar dos conjuntos de datos de cadena con los mismos datos?
Primero, conecte y combine los dos conjuntos de datos de cadena.
a3=a1 y a2
Entonces a3=sp2=20;sp1=34;sp3=2;sp2=3;sp1=4;
Segundo, agregue los mismos datos en a3.
La solución principal aquí es cómo encontrar los mismos datos.
En primer lugar, debido a que ahora a3 se compone de sp2, sp1, sp3, sp2 y sp1, es necesario encontrar los mismos sp2 y sp1 por separado y luego sumar los valores.
Dividir por función de división; obtener cada dato y valor para el delimitador.
Es decir, s_array = split(a3,;) a través de for i = 0 al bucle ubound(s_array) podemos obtener datos y valores individuales.
El formato de cada elemento es similar a sp2 = 20. Es necesario extraer Sp2 para compararlo con los datos del mismo grupo, por lo que se necesita una función independiente para extraerlo.
Función getSPName(sp)
getSPName = dividir(sp,=)(0)
Función final
Función obtenerNumSP(sp)
getSPNum = dividir(sp,=)(1)
función final
Obtenga el nombre de los datos antes de = y el valor de los datos después de = respectivamente.
En segundo lugar, cada dato se descompone, es decir, cómo encontrar el mismo nombre de datos.
Asumimos tal proceso, primero extraemos el primer elemento de la matriz a3, lo comparamos con los datos antes de dividir el primer elemento y lo sumamos si son iguales.
s_array = dividir(a3,;)
para i = 0 a ubound(s_array)
para j=i+1 a ubound(s_array)
si getSPName(s_array(i)) = getSPName(s_array(j)) entonces
Números = Números + Cint(getSPNum(s_array(j)))
terminar si
próximo
próximo
Hemos obtenido el valor final y podemos asignar el valor a una nueva matriz dinámica en cualquier momento para formar la matriz de datos combinada final.
redim Conservar resultado(p)
resultado(p) = getSPName(s_array(i)) & = & Núms
Ahora mismo
s_array = dividir(a3,;)
para i = 0 a ubound(s_array)
para j=i+1 a ubound(s_array)
si getSPName(s_array(i)) = getSPName(s_array(j)) entonces
Números = Números + Cint(getSPNum(s_array(j)))
terminar si
próximo
redim Conservar resultado(p)
resultado(p) = getSPName(s_array(i)) & = & Núms
p=p+1
próximo
Es probable que se encuentre con una situación como esta: cuando un elemento posterior en la matriz a3 siempre se opera con el mismo elemento comparado antes, por lo que este elemento no se puede incluir para i = 0 en ubound(s_array) dentro del resultado(p) = getSPName(s_array(i)) & = & Matriz dinámica de números.
Cómo solucionar el problema de no comparar más elementos que ya han sido comparados
Debemos marcar los elementos que se han comparado. Por ejemplo, en el array a3 (a3=sp2=20;sp1=34;sp3=2;sp2=3;sp1=4;) después de sacar sp2=20, se realiza la comparación. La operación finalizará A sp2 = 3. En este momento, el número de elemento de matriz de sp2 = 3 se marcará después de la operación de comparación y este elemento no se contará en la siguiente comparación de bucle.
s_array = dividir(a3,;)
para i = 0 a ubound(s_array)
para j=i+1 a ubound(s_array)
si getSPName(s_array(i)) = getSPName(s_array(j)) entonces
Números = Números + Cint(getSPNum(s_array(j)))
terminar si
redim Conservar ID(q)
ID(q) = j
q = q + 1
próximo
redim Conservar resultado(p)
resultado(p) = getSPName(s_array(i)) & = & Núms
p=p+1
próximo
La definición de ID (q) = j es marcar el elemento que actualmente es el mismo y asignarlo a la matriz dinámica id (q) se define como 0 de forma predeterminada, y q = q + 1 se repite nuevamente.
Luego, con esta marca, podemos optar selectivamente por comparar y acumular.
definir función
funciónIsInID(j)
tenue x
IsInID = falso
para cada x en ID
si x = j entonces
IsInID = verdadero
función de salida
terminar si
Próximo
función final
La función principal es
función mainhb(s)
s_array = dividir(s,;)
para i = 0 a ubound(s_array)
si no es IsInID(i) entonces
Números = getSPNum(s_array(i))
para j=i+1 a ubound(s_array)
si getSPName(s_array(i)) = getSPName(s_array(j)) entonces
Números = Números + Cint(getSPNum(s_array(j)))
redim Conservar ID(q)
ID(q) = j
q = q + 1
terminar si
próximo
redim Conservar resultado(p)
resultado(p) = getSPName(s_array(i)) & = & Núms
p = p + 1
terminar si
próximo
para cada x en el resultado
mainhb=principal&x&;
próximo
función final
La función general es
<%
resultado oscuro()
ID tenue()
tenue p, q, números
p=0
q= 0
Números = 0
redim Conservar ID(q)
ID(q) =
s = sp4=33;sp2=20;sp1=34;sp3=2;sp2=3;sp4=4;
s = izquierda(s,len(s)-1)
respuesta.escribir mainhb(s)
función mainhb(s)
s_array = dividir(s,;)
para i = 0 a ubound(s_array)
si no es IsInID(i) entonces
Números = getSPNum(s_array(i))
para j=i+1 a ubound(s_array)
si getSPName(s_array(i)) = getSPName(s_array(j)) entonces
Números = Números + Cint(getSPNum(s_array(j)))
redim Conservar ID(q)
ID(q) = j
q = q + 1
terminar si
próximo
redim Conservar resultado(p)
resultado(p) = getSPName(s_array(i)) & = & Núms
p = p + 1
terminar si
'Números = 0
próximo
para cada x en el resultado
mainhb=principal&x&;
próximo
función final
Función getSPName(sp)
getSPName = dividir(sp,=)(0)
Función final
Función getSPNum(sp)
getSPNum = dividir(sp,=)(1)
función final
funciónIsInID(j)
tenue x
IsInID = falso
para cada x en ID
si x = j entonces
IsInID = verdadero
función de salida
terminar si
Próximo
función final
%>