buscar iguales con array visual basic

18/02/2012 - 15:46 por jean swaneck | Informe spam
hola que tal, tengo un arreglo que guarda el codigo de producto y
otros datos lde los productos como valor, peso, cantidad, descripcion,
etc y necesito lograr un resumen de todos los productos, osea que si
tengo en el arreglo 3 elementos y 2 tienen el mismo codigo esto los
debo sumar, la cantidad, peso, agregar la descripcion etc.

alguien me puede ayudar porfavor, muchas gracias!
 

Leer las respuestas

#1 Leonardo Azpurua
19/02/2012 - 15:31 | Informe spam
"jean swaneck" escribió en el mensaje
news:
Mostrar la cita
Hola,

La información que das es insuficiente (lo que puede ser síntoma de un
trabajo de diseño igualmente insuficiente), pero veamos:

Nota: a efectos de simplificar, asumiremos que:
1.- arrayEntrada, que es el arreglo que almacena la lista inicial, está
lleno sólo con registros validos.
2.- arraySalida, que es donde se van a alamcenar los resumenes, tiene
suficente espacio para recibir todos los datos que se van a guarda en él.

Type datosProducto
Codigo As String
peso As Double
descripcion As String
// ...
End Type

Dim arrayEntrada() As datosProducto
Dim arraySalida() As datosProducto

Dim limiteSalida As Integer, nElementosSalida As Integer

Private Function buscarProducto(codigo As String) As Integer
Dim n As Integer
For n = 0 To nElementosSalida - 1
If arraySalida(n).Codigo = codigo Then
buscarProducto = n
Exit Function
End If
Next
buscarProducto = -1 ' no está
End Function


Public Sub ExtraerResumen()
Dim n As Integer, f As Integer
nElementosSalida = 0
For n = LBound(arrayEntrada) To uBound(arrayEntrada)
f = buscarProducto(arrayEntrada(n).Codigo
If f < 0 Then ' no estaba
arraySalida(nElementosSalida) = arrayEntrada(n)
arraySalida(nElementosSalida).cantidad = 0
arraySalida(nElementosSalida).peso = 0
f = nElementosSalida
nElementosSalida = nElementosSalida + 1
End If
With arraySalida(f)
.cantidad = cantidad + arrayEntrada(n).cantidad
.peso = .peso + (arrayEntrada(n).cantidad *
arrayEntrada[n].peso)
End With
Next
End Sub

Debe haber una manera mejor de hacerlo, pero esto debería darte una idea.


Salud!

Preguntas similares