Page 1 of 1

duda Aeval

PostPosted: Mon Feb 20, 2012 3:34 pm
by lucasdebeltran
Hola,

Tengo un array multidimensional y quiero reemplazar los elementos que tengan nil por otra cosa.

Lo ago así:


AEVAL(aArray,;
{|cValue,n| IF(cValue = nil,;
aArray[n] := "nada",)})


Pero únicamente me cambia las cinco primeras columnas (tiene seis) de la primera línea.

¿Qué hago mal?.

Muchas gracias.

Re: duda Aeval

PostPosted: Mon Feb 20, 2012 6:35 pm
by cnavarro
Buenas tardes
Puede ser porque el tipo de cValue sea "A", no?, ya que el array es multidimensional y cada elemento de aArray es otro array, y AEval no lo recorre.
Espero que pueda servirte de algo y haberme explicado.
Un saludo

Re: duda Aeval

PostPosted: Mon Feb 20, 2012 6:55 pm
by Francisco Horta
lucas prueba asi:
aArray := { {"1","",25},;
{"2",nil,35},;
{"3","tres",45} }

hablando de un multidimensional, para valor nulo en la posicion 2 de tu arreglo:
AEVAL(aArray,;
{|cValue,n| IF( aArray[n,2] = nil .or empty(aArray[n,2]),;
aArray[n,2] := "nada",)})

te quedaria asi:
aArray := { {"1","nada",25},;
{"2","nada",35},;
{"3","tres",45} }
saludos
paco

Re: duda Aeval

PostPosted: Mon Feb 20, 2012 7:02 pm
by cnavarro
Buenas tardes de nuevo
Yo no he conseguido "anidar" AEval para recorrer arrays multidimensionales.
Puedes intentar hacer algo asi:

Function Prueba()
Local aTabla := { {0,0},{0,1},{0,2},{0,3},{0,4},{0,5} }

//AEVal( aTabla , { | nV , nEle | Msginfo( Str(nV[1])+Str( nEle ) ) } )
AEVal( aTabla , { | nV , nEle | Porelarray( nV ) } )
//AEVal( aTabla , { | nV , nEle | Msginfo( Str(nV[1])+Str( nEle ) ) } )
//AEVal( aTabla , { | nV , nEle | Msginfo( Str(nV[2])+Str( nEle ) ) } )

Return nil

Function Porelarray( aT ) ; Return AEVal( aT , { | nV1 , nEle1 | if( nV1 = 0, aT[nEle1] := 99, ) })
Un saludo