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

Error con un bucle y array dinámico

Estas en el tema de Error con un bucle y array dinámico en el foro de ASP Clásico en Foros del Web. Hola, tengo dos array, uno lo extraigo de la base de datos, el segundo, lo hago con los datos que extraje de esta, rellenando con ...
  #1 (permalink)  
Antiguo 21/07/2005, 19:23
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 20 años, 1 mes
Puntos: 9
Error con un bucle y array dinámico

Hola, tengo dos array, uno lo extraigo de la base de datos, el segundo, lo hago con los datos que extraje de esta, rellenando con 0 aquellos lugares en donde los valores de la variable auxiliar (i) del primer bucle y el valor del array no concuerde. El tema es que me funciona, pero el número 15 es como si no me lo detectara, y en lugar de rellenar con el número 15, me lo rellena con 0. En cambio, con el número 16 si cumple la función que estoy buscando. Les dejo el código para ver si ven algún error.
Código:
 
Dim arr_Days(31)
Dim arr_Values(1)
 
arr_Values(0) = 15
arr_Values(1) = 16
 
  for i=1 to 31
	  for a=0 to UBound(arr_Values)
		  if i = arr_Values(a) then
			   arr_Days(i) = arr_Values(a)
		  else
			   arr_Days(i) = 0
		  end if
	   next
   next
Cuando recorro el array "arr_Days", el resultado es esto:

00000000000000016000000000000000

El 16 si me lo agrega al array, pero en el número 15 pareciera que no se ejecuta la primer parte del if. Lo raro es que si no hago lo de reemplazar por 0 en caso que no concuerden los valores, entonces si funciona.
Tienen alguna idea en donde puede estar el error?
Muchas gracias anticipadas.
Suerte!.
__________________
Add, never Remove
  #2 (permalink)  
Antiguo 21/07/2005, 22:33
 
Fecha de Ingreso: mayo-2003
Mensajes: 866
Antigüedad: 22 años
Puntos: 0
Te he preparado un ejemplo, ejecuta todo esto:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<html>
<head>
</head>

<body>
<%
Dim arr_Daysdonati(31)
Dim arr_Valuesdonati(1)

arr_Valuesdonati(0) = 15
arr_Valuesdonati(1) = 16

'EL ORDEN DE LOS VALORES ALTERA EL RESULTADO
'arr_Valuesdonati(0) = 16
'arr_Valuesdonati(1) = 15

for i=1 to 31
for a=0 to UBound(arr_Valuesdonati)
if i = arr_Valuesdonati(a) then
arr_Daysdonati(i) = arr_Valuesdonati(a)

' este es el sitio correcto
'Response.Write "<Font color=red>" & arr_Daysdonati(i) &"<br></Font>"
else
arr_Daysdonati(i) = 0
end if

' este es el sitio correcto
' Response.Write arr_Daysdonati(i)

next
' este es el sitio incorrecto
Response.Write arr_Daysdonati(i)
next
%>
<hr color="#CC0000" width="1200">
<table>
<tr>
<td>
<b>Cuando i=15</b> primero lo compara con el valor 15, como son iguales arr_Days(15)=15,<br>
despues compara con el valor 16, como son distintos arr_Days(15)=0.<br>
<b>FINALMENTE arr_Days(15)=0</b><br>

<b>Cuando i=16</b> no te ocurre lo mismo porque primero lo compara con el valor 15, como son distintos arr_Days(16)=0,<br>
despues compara con el valor 16, como son distintos arr_Days(16)=16<br>
<b>FINALMENTE arr_Days(16)=16</b><br>

<b> EL ORDEN DE LOS VALORES ALTERA EL RESULTADO<br>
arr_Valuesdonati(0) = 16<br>
arr_Valuesdonati(1) = 15<br>
00000000000000150000000000000000</b> <br>
</td></tr>
</table>



<hr color="#CC0000" width="1200">
<%
Dim arr_Days(31)
Dim arr_Values(1)

'VALORES BUSCADOS
arr_Values(0) = 15
arr_Values(1) = 16

'EL ORDEN DE LOS VALORES ALTERA EL RESULTADO
'arr_Values(0) = 16
'arr_Values(1) = 15

for i=1 to 31
Response.Write "HOY: " & i & "<BR>"
Response.Write "VARTYPE: " & VARTYPE(arr_Days(i)) & " VBEmpty 0 Uninitialized <BR>"
for a=0 to UBound(arr_Values)
Response.Write "<Font color=brown>VALOR BUSCADO: " & arr_Values(a) & "</font><BR>"
if i = arr_Values(a) then
Response.Write "<H3>ENCONTRADO</H3>"
Response.Write "<Font color=GREEN>ENTRA VARTYPE: " & VARTYPE(arr_Days(i)) & " VBEmpty 0 Uninitialized</Font><BR>"
arr_Days(i) = arr_Values(a) & "<BR>"
Response.Write "<Font color=BLUE>SALE: " & arr_Days(i) & "<BR>"
Response.Write "VARTYPE: " & VARTYPE(arr_Days(i)) & " VBString 8 String subtype </Font><BR>"


else
' reemplazar por 0 en caso que no concuerden los valores
arr_Days(i) = 0
Response.Write "<Font color=red>VARTYPE: " & VARTYPE(arr_Days(i)) & " VBInteger 2 Integer subtype <BR>"
Response.Write "SALE: " & arr_Days(i) & "</Font><BR>"

end if
next

' Response.Write arr_Days(i) & "<BR>"
next
%>
</body>
</html>
  #3 (permalink)  
Antiguo 22/07/2005, 01:02
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 20 años, 8 meses
Puntos: 18
rediós, eso parece la biblia!!!!

prueba ésto a ver si te vale, hermanito mariano....
Código:
 for i=0 to 31
		  if i = arr_Values(0) then
			   arr_Days(i) = arr_Values(0)
		  elseif i=arr_Values(1)  then
		  		arr_Days(i) = arr_Values(1) 
			else
			   arr_Days(i) = 0
		  end if
   next
  #4 (permalink)  
Antiguo 22/07/2005, 05:41
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 20 años, 1 mes
Puntos: 9
Muy bueno, muchas gracias a los dos. Pude entender porque no me estaba funcionando. Es increible como te puede ayudar ver las cosas en la pantalla y saber que es lo que está haciendo la máquina.
Al final lo solucioné con un simple exit for cuando encuentra el valor, así no sigue comparando y alterando el valor de ese elemento del array.
Lo tuyo Trasgukabi me funcionó barbaro también, pero el tema es que no se cuantos valores va a tener ese array (en realidad lo extraigo de una base de datos) al que le realizo la comparación, osea que si o si lo voy a tener que hacer con un bucle, y ahí era en donde me estaba dando problemas.
Muchas gracias a ambos por su ayuda.
Agradezco también su amabilidad en responder.
Saludos!.
__________________
Add, never Remove
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 07:51.