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

Obtener de un array Dos nuevos arrays o un array bidimensional

Estas en el tema de Obtener de un array Dos nuevos arrays o un array bidimensional en el foro de ASP Clásico en Foros del Web. Pretendo obtener de un array, por ejemplo: analisisarray=("2,3,3,3,2,2,2,5,2,5,2") Dos nuevos arrays o un array bidimensional en el que tenga por un lado cada elemento del ...
  #1 (permalink)  
Antiguo 04/11/2005, 16:54
 
Fecha de Ingreso: mayo-2003
Mensajes: 866
Antigüedad: 21 años, 11 meses
Puntos: 0
Obtener de un array Dos nuevos arrays o un array bidimensional

Pretendo obtener de un array, por ejemplo: analisisarray=("2,3,3,3,2,2,2,5,2,5,2")

Dos nuevos arrays o un array bidimensional en el
que tenga por un lado cada elemento del array (sin que se repitan)
y por otro lado el numero de veces que aparece cada elemento.

Para este ejemplo Y PARA Dos nuevos arrays seria:
Nuevoarrayuno=("2,3,5") 'ELEMENTOS
Nuevoarraydos=("6,3,2") 'NUMERO DE VECES QUE APARECE CADA ELEMENTO



El problema es que como vereis, solo detecto que APARECE CON ANTERIORIDAD el numero 2.





<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<%Response.expires=-1500%>
<%
Function Cuantasveces(analisisarray,posiclaprinci)
elementosarray = split(analisisarray, ",", -1 , 1)
cuentaelementosarray = UBound(Split(analisisarray, ",", -1, 1)) + 1
For i=0 to cuentaelementosarray -1
If posiclaprinci=elementosarray(i) then
apariciones=apariciones+1
End if
Next
Cuantasveces=apariciones
apariciones=0
End Function
%>
<%
SUB MostrarIMGPRODinPAQUETE(analisisarray)
elementosarray = split(analisisarray, ",", -1 , 1)
cuentaelementosarray = UBound(Split(analisisarray, ",", -1, 1)) + 1

For i=0 to cuentaelementosarray -1
If YACOMPROBADAS="" then
YACOMPROBADAS= elementosarray(i)
posiclaprinci=elementosarray(i)
else
indiceyacomprobadas = split(YACOMPROBADAS, ",")
for GGG = 0 to ubound(indiceyacomprobadas)
if instr(indiceyacomprobadas(GGG), elementosarray(i))> 0 And Len(indiceyacomprobadas(GGG))=Len(elementosarray(i )) then
RESPONSE.Write "<FONT COLOR=RED>APARECE CON ANTERIORIDAD </font><br>"
ELSE
YACOMPROBADAS=YACOMPROBADAS & "," & elementosarray(i)
posiclaprinci=elementosarray(i)
EXIT FOR
end if
next
end if
NumVeces=Cuantasveces(analisisarray,posiclaprinci)
Response.Write "analisisarray: " & analisisarray & "<br>"
RESPONSE.Write "<FONT COLOR=blue>posiclaprinci: " & posiclaprinci & " </font><br>"
Response.Write "cuentaelementosarray: " & cuentaelementosarray & "<br>"
Response.Write "numveces: " & NumVeces & "<br>"
Response.Write "YACOMPROBADAS: " & YACOMPROBADAS & "<br>"
Response.Write "<hr color=blue>"
Next
End SUB
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title></title>
</head>
<body>
<%
analisisarray=("2,3,3,3,2,2,2,5,2,5,2")
CALL MostrarIMGPRODinPAQUETE(analisisarray)
%>
</body>
</html>
  #2 (permalink)  
Antiguo 04/11/2005, 21:08
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 3 meses
Puntos: 98
Buenas sqa, me diverti bastante con el script este, aqui te lo dejo, no esta totalmente probado, pero a lo mejor te da una idea:

Código:
<%
Function OrdenaArreglo(arreglo)
	If isArray(arreglo) Then
		Dim temp
		arrOr = arreglo
		For i = 0 to uBound(arrOr)
			For j = i + 1 to uBound(arrOr)		
				If cint(arrOr(i)) > cint(arrOr(j)) Then
					temp = arrOr(i)
					arrOr(i) = arrOr(j)
					arrOr(j) = temp
				End If
			Next
		Next
	Else
		OrdenaArreglo = Null
	End If
	OrdenaArreglo = arrOr
End Function

Function AnalizaArreglo(arr)
	Dim strUnidades
	for j = 0 to uBound(arr)
		if j = 0 then
			strUnidades = arr(j) & ","
		end if
		on error resume next
		if arr(j) <> arr(j+1) then
			strUnidades = strUnidades & arr(j+1) & ","
		end if
	next
	'response.Write strUnidades
	strUnidades = left(strUnidades, len(strUnidades) - 1)
	arrUnidades = split(strUnidades, ",")
	Dim arrCoincidencias()
	Redim arrCoincidencias(uBound(arrUnidades))
	for j = 0 to uBound(arrUnidades)
		for i = 0 to uBound(arr)
			if cint(arr(i)) = cint(arrUnidades(j)) then
				if isEmpty(arrCoincidencias(j)) then
					arrCoincidencias(j) = 0
				end if
				arrCoincidencias(j) = arrCoincidencias(j) + 1
			end if
		next
	next
	Dim mtxUnidadesCoincidencias()
	Redim mtxUnidadesCoincidencias(uBound(arrUnidades),1)
	
	for j = 0 to uBound(arrCoincidencias)
		mtxUnidadesCoincidencias(j,0) = arrUnidades(j)
		mtxUnidadesCoincidencias(j,1) = arrCoincidencias(j)
	next
	erase arr
	erase arrUnidades
	erase arrCoincidencias
	AnalizaArreglo = mtxUnidadesCoincidencias
End Function


analisisarray = Array(2,3,3,3,2,2,2,5,2,5,2)
r = OrdenaArreglo(analisisarray)
if not isNull(r) then
	matriz = AnalizaArreglo(r)
	if isArray(matriz) then
		Response.Write("| Numero | ")
		Response.Write("Coincidencias |" & "<br>")
		for j = 0 to uBound(matriz)
			Response.Write("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" & matriz(j,0) & "&nbsp;&nbsp;&nbsp;&nbsp;")
			Response.Write("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" & matriz(j,1) & "&nbsp;&nbsp;&nbsp;&nbsp;")
			Response.Write("<br>")
		next
	else
		'No hay resultados, despida al programador
	end if
else
	'No existe ningun arreglo
end if
%>
Salu2 y shupando que es gerundio!
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 04/11/2005, 21:44
 
Fecha de Ingreso: mayo-2003
Mensajes: 866
Antigüedad: 21 años, 11 meses
Puntos: 0
Me muero de ganas por probarlo, como siempre sacandome de los mayores aprietos U goldman, ahora te digo
  #4 (permalink)  
Antiguo 04/11/2005, 22:14
 
Fecha de Ingreso: mayo-2003
Mensajes: 866
Antigüedad: 21 años, 11 meses
Puntos: 0
U GOLDMAN, muchisimas gracias. :

Me he reido bastante con:
'No hay resultados, despida al programador


Esto por lo que veo funciona perfectamente.

me has refrescado la memoria con:

analisisarray = Array(2,3,3,3,2,2,2,5,2,5,2)

estaba teniendo problemas con

analisisarray=("2,3,3,3,2,2,2,5,2,5,2")

En la parte:
---------------------------------------------------------------------------
Function AnalizaArreglo(arr)
Dim strUnidades
for j = 0 to uBound(arr)
if j = 0 then
strUnidades = arr(j) & ","
end if
on error resume next
if arr(j) <> arr(j+1) then
strUnidades = strUnidades & arr(j+1) & ","
end if
next
---------------------------------------------------------------------------

¿Podria ser?:
---------------------------------------------------------------------------
Function AnalizaArreglo(arr)
Dim strUnidades
for j = 0 to uBound(arr)-1
if j = 0 then
strUnidades = arr(j) & ","
else

if arr(j) <> arr(j+1) then
strUnidades = strUnidades & arr(j+1) & ","
end if

end if
next
---------------------------------------------------------------------------

Lo digo por evitar on error resume next.

Aunque seguro que si tu lo tienes puesto asi es por algo que a mi se me escapa.

Última edición por sqa212; 04/11/2005 a las 22:22
  #5 (permalink)  
Antiguo 04/11/2005, 22:44
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 3 meses
Puntos: 98
Dejame pensarlo, pero me parece que si haces eso, no busca en todos los indices, sino hasta el limite superior - 1
De la otra manera, compara el actual con el actual = 1 para cada uno de los indices, por eso el on error, pues tirara siempre una excepcion en el ultimo indice...

No estoy seguro, en este momento ya me enrrede, pero pruebalo, y a ver que pasa!


Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #6 (permalink)  
Antiguo 04/11/2005, 23:23
 
Fecha de Ingreso: mayo-2003
Mensajes: 866
Antigüedad: 21 años, 11 meses
Puntos: 0
Ya te comento que tal las pruebas
  #7 (permalink)  
Antiguo 05/11/2005, 19:50
 
Fecha de Ingreso: mayo-2003
Mensajes: 866
Antigüedad: 21 años, 11 meses
Puntos: 0
Cita:
Iniciado por u_goldman
Dejame pensarlo, pero me parece que si haces eso, no busca en todos los indices, sino hasta el limite superior - 1
De la otra manera, compara el actual con el actual = 1 para cada uno de los indices, por eso el on error, pues tirara siempre una excepcion en el ultimo indice...

No estoy seguro, en este momento ya me enrrede, pero pruebalo, y a ver que pasa!


Salu2,

VUELVES A TENER RAZON GRACIAS DE NUEVO
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 19:53.