¿Cómo defino esto como bloque?

Post Reply
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

¿Cómo defino esto como bloque?

Post by goosfancito »

hola.

Tengo una idea dando vueltas, necesito pasar en un array 3 parametros compuesto por:
un numero: 4,
una conficion: if(::oDato:fields(2):value==2)
un valor de color: "#D9DFF0"
para luego analizar esa "condición"(segundo parametro) y dependiendo de el resultado ponerle un color.

Lo que no logro hacer es poder pasar la condicion y luego utilizarla.

Code: Select all

aArray:= {4, || if(::oDato:fields(2):value==2) ,"#D9DFF0" }
gracias
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
User avatar
jllinas
Posts: 189
Joined: Fri Oct 14, 2005 12:33 am
Location: Santo Domingo, Dominican Republic
Contact:

Re: ¿Cómo defino esto como bloque?

Post by jllinas »

Amigo,

Ignoro que significa el "4" (parecería que es primer elemento en un arreglo que quieres usar después en "algo"), pero si lo que deseas es evaluar la condición, y en base al resultado retornar el color, seria algo asi:

array := {4, if(condicion, color,)}

Y creo que para evaluarla podrias usar AEVAL(). Fijate en los ejemplos de xHarbour, y alli te puedes ayudar.

Suerte (si te interpreté bien),
Julio Llinás
Visita mi Blog en http://mangucybernetico.blogspot.com/
xHarbour 1.1.0 + FWH810 + Borland 5.5.1
User avatar
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

Re: ¿Cómo defino esto como bloque?

Post by mastintin »

Si la funcion a donde la pasar es un metodo conocera ::oDato , sino deberas pasar la referencia a la clase

Code: Select all


local bcondicion:= {|o |  if (o:oDato:fields(2):value==2) } 
local aArray:= {4, bcondicion , self ,"#D9DFF0" }
recibe(aArray)

function recibe(aArray)
local bcondicion:=aArray[2]
local o:=aArray[3]
if eval(bcondicion,o )
  ...
else
...
endif


Return nil

 
Aunque yo evaluaria la condicon antes de pasarla y pasaría el resultado ...

Code: Select all


local lcondicion:=  Iif (::oDato:fields(2):value==2, .t. ,.f.)  
local aArray:= {4, lcondicion , "#D9DFF0" }
recibe(aArray)


function recibe(aArray)

if aArray[2]
  ...
else
...
endif


Return nil



 
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

Re: ¿Cómo defino esto como bloque?

Post by goosfancito »

Gracias a ambos. Pero tomando este ejemplo paso a explicarme mejor.
El array aArray puede o no contener mas de un arreglo del que mensionaba. A ver...

aArray:= {
{1, "saldo=2", "#001225"},
{10, "cliente=2", "#000025"},
}


quiero que luego poder desglozar esas dos condiciones. ya que "saldo" y "cliente" son variables.

Code: Select all

for nitem:= 1 to 5
   if (aArray[1,1] = nItem)
      if ACA QUIERO HACER QUE PREGUNTE POR LA CONDICION///// 
        PINTAR DEL COLOR aArray[1,3]
     endif
   endif
next 
 

Me explique mejor?
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
User avatar
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

Re: ¿Cómo defino esto como bloque?

Post by mastintin »

pasa el array asi :

Code: Select all

aArray:= {
{1,  {||saldo=2 }, "#001225"},
{10,{|| cliente=2 }, "#000025"},
}

 
y luego evalualo:

Code: Select all

for nitem:= 1 to 5
   if (aArray[1,1] = nItem)
      if eval(aArray[1,2])
        PINTAR DEL COLOR aArray[1,3]
     endif
   endif

 
User avatar
jllinas
Posts: 189
Joined: Fri Oct 14, 2005 12:33 am
Location: Santo Domingo, Dominican Republic
Contact:

Re: ¿Cómo defino esto como bloque?

Post by jllinas »

Creo que seria asi:

Code: Select all

for nitem:= 1 to 5
   if (aArray[1,1] = nItem)
      if &("("+aArray[1,2]+")") 
        PINTAR DEL COLOR aArray[1,3]
     endif
   endif
next 
 
Lo que ocurre es que la condicion debe ser testeada en tiempo real (no se puede evaluar antes), ese elemento del aArray esta en string, por lo cual debes utlizar el macro (&()) de la expresion, que seria, por ejemplo "(cliente==2)"

Suerte,
Julio Llinás
Visita mi Blog en http://mangucybernetico.blogspot.com/
xHarbour 1.1.0 + FWH810 + Borland 5.5.1
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

Re: ¿Cómo defino esto como bloque?

Post by goosfancito »

Entendi lo que me explicas pero en mi codigo no me anda.

Code: Select all

Ejmplo:

:aColorear   := {{4,"nItem==1","#001225"}}
...

FOR nItem:= 1 TO Len(::aColumna)
   IF &("("+::aColorear[1,2]+")")
      // cuando lo ejecuto me dice NITEM no definido... es por eso que no lo entiendo.
      // nitem esta definido.
            ENDIF
next nITem
 
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
User avatar
jllinas
Posts: 189
Joined: Fri Oct 14, 2005 12:33 am
Location: Santo Domingo, Dominican Republic
Contact:

Re: ¿Cómo defino esto como bloque?

Post by jllinas »

El mensaje de error que dices aquí tiene que ver con otra cosa (definición de variables). Busca por otro lado.

Yo haría debug paso-a-paso, a ver que está pasando con nItem (antes, durante y despues del bucle).

Suerte,
Julio Llinás
Visita mi Blog en http://mangucybernetico.blogspot.com/
xHarbour 1.1.0 + FWH810 + Borland 5.5.1
User avatar
jrestojeda
Posts: 543
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: ¿Cómo defino esto como bloque?

Post by jrestojeda »

Hola amigo...
Prueba algo así:

AADD(aArray ,{ n1 , lCondicion1 , Color1 } )
AADD(aArray ,{ n2 , lCondicion2 , Color2 } )
AADD(aArray ,{ n3 , lCondicion3 , Color3 } )

Code: Select all

for nitem:= 1 to 3
   if aArray[nItem][2]
     PINTAR DEL COLOR aArray[nItem][3]
  endif
next
Espero te sirva.
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: ¿Cómo defino esto como bloque?

Post by Daniel Garcia-Gil »

Goosfancito

Esta bien que te genere ese error, un code block es un proceso que se ejecuta en un area de memoria distinta a la funcion actual, donde maneja sus propias variables, a menos que declares nItem como publica no tendras acceso a su valor, realmente nItem no existe dentro de ese proceso (code block)

Cambiando un poco la idea de Julio podria usarse algo asi

Code: Select all

#include "fivewin.ch"

function main()

   local aArray := { { 4, "nItem==1", "#001225" } }

   Bloque( aArray )

return nil

FUNCTION Bloque( aArray )
   local nItem
   local cBloque
   
   FOR nItem:= 1 TO Len( aArray )
      cBloque = "{| nItem | " + aArray[ 1, 2 ] + "}"
      IF Eval( &cBloque, nItem )
         ? "PASO"   
      ENDIF
   next nITem
   
return nil
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

Re: ¿Cómo defino esto como bloque?

Post by goosfancito »

voy a tener que ver otra forma entonces.
porque nItem lo utilice como ejemplo, pero la realidad es que _ van a ser
o de un RecordSet o de alguna otra variable que podr'ia ser como nItem.

gracias.
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: ¿Cómo defino esto como bloque?

Post by Daniel Garcia-Gil »

...

Ok pasalo como parametro al codeblock al momento de evaluarlo, mira el ejemplo que te expuse
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Post Reply