Foros del Web » Programando para Internet » ASP Clásico »

Ayuda expertos Manipulacion contenido matriz

Estas en el tema de Ayuda expertos Manipulacion contenido matriz en el foro de ASP Clásico en Foros del Web. He creado una matriz de 2 dimensiones. La primera dimension recoge el producto del que se trata y la segunda dimension recoge la cantidad. <% ...
  #1 (permalink)  
Antiguo 11/10/2004, 11:44
 
Fecha de Ingreso: mayo-2003
Mensajes: 866
Antigüedad: 22 años
Puntos: 0
Ayuda expertos Manipulacion contenido matriz

He creado una matriz de 2 dimensiones.
La primera dimension recoge el producto del que se trata y la segunda dimension recoge la cantidad.

<%
Dim mimatriz(20,1)
mimatriz(1,0)=idproducto
mimatriz(1,1)=cantidad
%>


De esta forma obtengo Pares (idproducto,cantidad)
<%
For i=LBound(mimatriz, 1) to UBound(mimatriz, 1)
For j=LBound(mimatriz, 2) to UBound(mimatriz, 2)
Response.Write( mimatriz(i,j) & " " )
Next
Next%>


Esto me mostraria por ejemplo si he realizado 4 acciones distintas de compra lo siguiente:
1 2 3 4 5 7 1 5

La interpretacion de esto seria:
Operacion de compra nº 1:
IdProducto: 1
Cantidad: 2
Operacion de compra nº 2:
IdProducto: 3
Cantidad: 4
Operacion de compra nº 3:
IdProducto: 5
Cantidad: 7
Operacion de compra nº 4:
IdProducto: 1
Cantidad: 5

¿Como tendria que hacer para que agrupase las compras
que tengan la misma idproducto?

Me explico a mi me gustaria de alguna forma obtener:

IdProducto: 1
Cantidad: 7 (2 corresponden a la primera operacion de compra y 5 al la cuarta operacion de compra)

IdProducto: 3 (Esta no sufriria ninguna modificacion ya que no hay dos operaciones de compra con igual idproducto)
Cantidad: 4

IdProducto: 1 (Esta no sufriria ninguna modificacion ya que no hay dos operaciones de compra con igual idproducto)
Cantidad: 5
  #2 (permalink)  
Antiguo 11/10/2004, 11:57
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Dim mimatriz(20,1)


En realidad aqui lo que tienes es una matriz bidimensional de 21 filas por 2 columnas

Código:
| 0 |  1  |
| 1 |
| 2 |
.
.
.
|20|
Cita:
La interpretacion de esto seria:
Operacion de compra nº 1:
IdProducto: 1
Cantidad: 2
Operacion de compra nº 2:
IdProducto: 3
Cantidad: 4
Operacion de compra nº 3:
IdProducto: 5
Cantidad: 7
Operacion de compra nº 4:
IdProducto: 1
Cantidad: 5
La manera en que se me ocurre, es que tomes el valor de la columna 0, y recorras las 21 filas para encontrar coincidencias, es decir, la columna 0 contra la 1, 2, 3, 4, 5, 6...20 y así para cada una de las filas que tengas (21).
si encuentras coincidencias suma el valor de la columna 1 en el indice 0 + el valor de la columna 1 en el índice en cuestión...complicado eh?
En realidad lo único que tienes aqui es un par valor, para lo cual es mucho más sencillo utilizar el diccionario de datos de ASP, que almacena un par valor precisamente y tiene ya sus propios métodos para hacer lo que tu pretendes.


Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 13/10/2004, 01:37
 
Fecha de Ingreso: mayo-2003
Mensajes: 866
Antigüedad: 22 años
Puntos: 0
Ugoldman gracias por tu respuesta, lo maximo que he logrado alcanzar a hacer tras tu explicación es esto:

Recorremos la primera columna:(Productos)<br>
<%For i=0 to 20
Response.Write(mimatriz(i,0)) & "|"
Next
%>

<br>
Recorremos la segunda columna:(Cantidad)<br>
<%For i=0 to 20
Response.Write(mimatriz(i,1)) & "|"
Next
%>


El caracter | lo he puesto porque si la idproducto tiene dos cifras no quiero que me tome las cifras por separado a la hora de hacer las comparaciones (Aunque no se si es necesario usarlo o no).

No se como puedo encontrar las coincidencias entre los valores que me arroja el primero de estos dos bucles.

No se como hacer lo de suma el valor de la columna 1 en el indice 0 + el valor de la columna 1 en el índice en cuestión

Tampoco se como lo podria hacer con el diccionario de datos de ASP. :

Última edición por sqa212; 13/10/2004 a las 10:33
  #4 (permalink)  
Antiguo 13/10/2004, 10:34
 
Fecha de Ingreso: mayo-2003
Mensajes: 866
Antigüedad: 22 años
Puntos: 0
U Goldman he probado a hacer algo como esto:
Pero ademas de ser una manera un tanto cutre de lograr el objetivo tampoco funciona.

<%
mimatriz=session("nuevocarro")
inmimatriz=false
for i=lbound(mimatriz) to ubound(mimatriz)
if mimatriz(i,0)="" and mimatriz(i,1)="" and not(inmimatriz) then
mimatriz(i,0)=request.form("idproducto")
mimatriz(i,1)=request.form("cantidad")
inmimatriz=true
%>
<%
X0=mimatriz(0,0)
X1=mimatriz(1,0)
X2=mimatriz(2,0)
X3=mimatriz(3,0)
X4=mimatriz(4,0)
X5=mimatriz(5,0)
X6=mimatriz(6,0)
X7=mimatriz(7,0)
X8=mimatriz(8,0)
X9=mimatriz(9,0)
X10=mimatriz(10,0)
X11=mimatriz(11,0)
X12=mimatriz(12,0)
X13=mimatriz(13,0)
X14=mimatriz(14,0)
X15=mimatriz(15,0)
X16=mimatriz(16,0)
X17=mimatriz(17,0)
X18=mimatriz(18,0)
X19=mimatriz(19,0)
X20=mimatriz(20,0)
%>
<%end if
next
session("nuevocarro")=mimatriz
%>
<%
if idproducto =X0 then
%>
<%
QX0A=mimatriz(0,1)
QX0B=mimatriz(1,1)
QX0C=mimatriz(2,1)
QX0D=mimatriz(3,1)
QX0E=mimatriz(4,1)
QX0F=mimatriz(5,1)
QX0G=mimatriz(6,1)
QX0H=mimatriz(7,1)
QX0I=mimatriz(8,1)
QX0J=mimatriz(9,1)
QX0K=mimatriz(10,1)
QX0L=mimatriz(11,1)
QX0M=mimatriz(12,1)
QX0N=mimatriz(13,1)
QX0P=mimatriz(14,1)
QX0Q=mimatriz(15,1)
QX0R=mimatriz(16,1)
QX0S=mimatriz(17,1)
QX0T=mimatriz(18,1)
QX0U=mimatriz(19,1)
QX0V=mimatriz(20,1)
%>

<%ELSE%>
<%if idproducto =X1 then%>
<%
QX1A=mimatriz(0,1)
QX1B=mimatriz(1,1)
QX1C=mimatriz(2,1)
QX1D=mimatriz(3,1)
QX1E=mimatriz(4,1)
QX1F=mimatriz(5,1)
QX1G=mimatriz(6,1)
QX1H=mimatriz(7,1)
QX1I=mimatriz(8,1)
QX1J=mimatriz(9,1)
QX1K=mimatriz(10,1)
QX1L=mimatriz(11,1)
QX1M=mimatriz(12,1)
QX1N=mimatriz(13,1)
QX1P=mimatriz(14,1)
QX1Q=mimatriz(15,1)
QX1R=mimatriz(16,1)
QX1S=mimatriz(17,1)
QX1T=mimatriz(18,1)
QX1U=mimatriz(19,1)
QX1V=mimatriz(20,1)
%>
<%ELSE%>
<%if idproducto =X2 then%>
<%
QX2A=mimatriz(0,1)
QX2B=mimatriz(1,1)
QX2C=mimatriz(2,1)
QX2D=mimatriz(3,1)
QX2E=mimatriz(4,1)
QX2F=mimatriz(5,1)
QX2G=mimatriz(6,1)
QX2H=mimatriz(7,1)
QX2I=mimatriz(8,1)
QX2J=mimatriz(9,1)
QX2K=mimatriz(10,1)
QX2L=mimatriz(11,1)
QX2M=mimatriz(12,1)
QX2N=mimatriz(13,1)
QX2P=mimatriz(14,1)
QX2Q=mimatriz(15,1)
QX2R=mimatriz(16,1)
QX2S=mimatriz(17,1)
QX2T=mimatriz(18,1)
QX2U=mimatriz(19,1)
QX2V=mimatriz(20,1)
%>
<%ELSE%>
<%if idproducto =X3 then%>
<%
QX3A=mimatriz(0,1)
QX3B=mimatriz(1,1)
QX3C=mimatriz(2,1)

Etc, etc hasta idproducto =X20
  #5 (permalink)  
Antiguo 13/10/2004, 10:44
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Ya que te empeñas en hacerlo así me pusiste a trabajar...estoy preparando un ejemplo, ahora te aviso


Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #6 (permalink)  
Antiguo 13/10/2004, 10:51
 
Fecha de Ingreso: mayo-2003
Mensajes: 866
Antigüedad: 22 años
Puntos: 0
Gracias, no se como agradecerte que te pongas a hacerlo, ni he comido este mediodia, si no fuera por tus constantes colaboraciones todavia estaria averiguando como recoger un valor de un request.form!!!.
Mil gracias solo por intentarlo.
  #7 (permalink)  
Antiguo 13/10/2004, 11:38
 
Fecha de Ingreso: octubre-2004
Mensajes: 168
Antigüedad: 20 años, 7 meses
Puntos: 0
Wenas, he leido tu primer mensaje, los demás he visto que son intentos de soluciones, te soy sincero, no me apetecía leer tanto código, jajaja

Weno, lo que buscas es hacer una matriz con elementos cada elemento con un identificador y número de compras que peticiones de compras, y si al hacer varias peticiones coincide el identificador de producto que esas peticiones aparezcan como una sola en un total¿? Es algo asi?
  #8 (permalink)  
Antiguo 13/10/2004, 11:47
 
Fecha de Ingreso: mayo-2003
Mensajes: 866
Antigüedad: 22 años
Puntos: 0
Sharik creo que has explicado bien lo que quiero hacer.
  #9 (permalink)  
Antiguo 13/10/2004, 13:53
 
Fecha de Ingreso: octubre-2004
Mensajes: 168
Antigüedad: 20 años, 7 meses
Puntos: 0
Weno, en ese caso...no sé Visual Basic, lo he hecho en Java sin probarlo, pero vamos creo que no tiene problemas, mira si te vale:

BufferedReader leer=new BufferedReader(new InputStreamReader(System.in()));
System.out.println("Introduce el numero de pedidos");
int N=Integer.parseInt(leer.readLine());
int pedidos[N][2];
public void Inicializar(int pedidos[N][2], int N){
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
pedidos[i][j]=0;
}
public void Pedidos(int pedidos[N][2], int N){
int id;
int numpedidos=0;
int numpedidos2=0;
boolean seguir=true;
for(int i=0;i<N&&seguir==true;i++)//va pidiendo los datos para los N pedidos
System.out.println("Introduce el identificador del producto a pedir");
int id=Integer.parseInt(leer.readLine());
for(int t=0;t<N;t++){//comprueba si el identificador se encuentra ya
if(pedidos[t][0]==id){//si es asi añade el pedido al ya existente
System.out.println("Introduce el numero de unidades a pedir");
numpedidos=Integer.parseInt(leer.readLine());
pedidos[t][1]+=numpedidos;
}
}
System.out.println("Introduce el numero de unidades a pedir");//sino asigna en una casilla nueva
numpedidos2=Integer.parseInt(leer.readLine());
pedidos[i][1]=numpedidos;
System.out.println("Quiere seguir introduciendo pedidos");
System.out.println("Marque (1) para si");
System.out.println("Marque (0) para No");
int opc=Integer.parseInt(leer.readLine());
if(opc==0)
seguir=false;
}
System.out.println("Gracias por usar nuestro sistema de pedidos");

Esta hecho de forma que es una matriz bidimensional en la que:

id 5 8 4 3 1
cant 10 4 3 1 4 cada identificador le corresponde un número de pedidos
  #10 (permalink)  
Antiguo 14/10/2004, 00:12
 
Fecha de Ingreso: mayo-2003
Mensajes: 866
Antigüedad: 22 años
Puntos: 0
Sharik muchas gracias, pero no tengo ni idea de java, ¿puedo trabajar con java en paginas asp?.
La verdad es que te has pegado una currada impresionante, pero no tengo ni la mas remota idea de como integrar lo que tengo ya tengo hecho en ASP con tu solucion.
Gracias por tu ayuda
  #11 (permalink)  
Antiguo 14/10/2004, 06:07
 
Fecha de Ingreso: octubre-2004
Mensajes: 168
Antigüedad: 20 años, 7 meses
Puntos: 0
¿Estas trabajando con asp clásico?, ese no lo conozco, yo estoy empezando con ASP.NET, pero como aplicación web basada en J#, es decir, Java, por lo que si que puedes trabajar en ASP.NET con el código que te he dado, pero...seguramente tu proyecto aún siendo en .NET ya lo tendrás definido en Visual Basic, asi que va a estar xungo. Si quieres te lo puedo escribir en C, pero si me dices que no tienes ni idea de Java, supongo que tampoco de C. Asi que...empezaré aprender Visual cuando sepa, creo que ya tendrás la solución, asi que sorry.
  #12 (permalink)  
Antiguo 14/10/2004, 08:08
 
Fecha de Ingreso: mayo-2003
Mensajes: 866
Antigüedad: 22 años
Puntos: 0
Si es asp clasico y LO HE CONSEGUIDO!!!!!
Aqui os pongo el codigo:
<%for i=lbound(mimatriz) to ubound(mimatriz)
'if mimatriz(i,0)="" and mimatriz(i,1)="" and not(inmimatriz) then
if mimatriz(i,0)="" and mimatriz(i,1)="" and not(inmimatriz) then
mimatriz(i,0)=idproducto
mimatriz(i,1)=request.form("cantidad")
inmimatriz=true%>

<%end if
next%>
<%
acumulado=0
Numeroveces=0
for i = 0 to 20
cadena2 =(mimatriz(i,0))
tamanoid=len(idproducto)
tamanomatrix=len(mimatriz(i,0))
if tamanoid=tamanomatrix then
if instr(cadena2, idproducto) > 0 then
Numeroveces=Numeroveces+1
acumulado=acumulado+(mimatriz(i,1))
else
end if
else
end if
Next

%>

Gracias por vuestra ayuda
  #13 (permalink)  
Antiguo 14/10/2004, 12:16
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Bueno, de todas formas te dejo este código:

Código:
<%
'Dimesionamos las matrices necesarias
Dim matriz(19, 1)
Dim matrizBIS(19, 1)

'Asignamos valor a la matriz, esta se supone que debería llegar con valores
For i = 0 to 19
	For x = 0 to 1
		matriz(i, x) = i + 1
	Next
Next

'Ponemos los valores necesarios duplicados
matriz(3, 0) = 1
matriz(3, 1) = 10
matriz(6, 0) = 2
matriz(6, 1) = 2

'SIrve para imprimir la matriz final matrizBIS
Sub ImprimeMatriz()
	For y = 0 to 19
		Response.Write "Indice " & y & ": " & matrizBIS(y, 0) & " = " & matrizBIS(y, 1) & "<br>"
	Next
End Sub

'Regresa el número de renglones ocupados de matrizBIS
Function CuentaIndice()
	For j = 0 to 19
		If matrizBIS(j, 0) = "" Then
			Exit For
		End If
	Next
	CuentaIndice = j
End Function

'Determina si un índice está repetido en la matriz final
Function IndiceRepetido(queIndice)
	repetido = false
		For r = 0 to 19
			If cint(queIndice) = cint(matrizBIS(r, 0)) Then
				repetido = true
				Exit For
			End If
		Next
	IndiceRepetido = repetido
End Function

'Aqui todo el show de comparar cada índice de la matriz con los siguientes
For i = 0 to 19
	valor = 0
	mi_indice = matriz(i, 0)
	repetido = IndiceRepetido(mi_indice)
	If not repetido Then
		valor = matriz(i, 1)
		For z = i + 1 to 19
			If cint(mi_indice) = cint(matriz(z, 0)) Then
				valor = valor + matriz(z, 1)
			End If
		Next
		insertaEn = CuentaIndice()
		matrizBIS(InsertaEn, 0) = mi_indice
		matrizBIS(InsertaEn, 1) = valor
	End If
Next

'Imprimimos
ImprimeMatriz
%>
Tu solución es mas sencilla

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #14 (permalink)  
Antiguo 15/10/2004, 00:19
 
Fecha de Ingreso: mayo-2003
Mensajes: 866
Antigüedad: 22 años
Puntos: 0
Gracias U goldman lo pruebo y te digo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:24.