Migrando a Xailer 2.7 + Harbour(Operador IN en Harbour)
Publicado: Vie Nov 09, 2012 3:05 pm
Estimados amigos
Finalmente nos hemos animado a dar el salto a Xailer 2.7.4 con Harbour
3.2 visto que por los comentarios en el foro no hay mayores problemas de
compatibilidad.
El primer problema que he encontrado ha sido con el operador "IN" de
xHarbour que utilizamos con cierta frecuencia. Después de indagar en
Internet he conseguido que aparentemente este operador no existe en
Harbour, en tal sentido he preparado una pequeña función que intenta
hacer algo similar, aunque entiendo que no será con la misma eficiencia
que lo hace el operador "IN" en xHarbour. Este es el código:
// -----------------------------------------
FUNCTION IN(xPar1, xPar2)
LOCAL lRetVal := .F.
TRY
DO CASE
CASE ValType(xPar1) = "C" .AND. ValType(xPar2) = "C"
lRetVal := xPar1 $ xPar2
CASE ValType(xPar2) = "A"
lRetVal := AScan(xPar2, { |x| xPar1 = x }) > 0
ENDCASE
CATCH
END
RETURN lRetVal
// -----------------------------------------
y la forma de hacer la comparacion seria
IF IN("rojo", {"blanco", "verde", "rojo"}
...
ENDIF
en lugar de
IF "rojo" IN {"blanco", "verde", "rojo"}
...
ENDIF
Se les ocurre otra forma diferente de implementar esto?
Agradecido por sus comentarios
Saludos
Williams Pacheco
Finalmente nos hemos animado a dar el salto a Xailer 2.7.4 con Harbour
3.2 visto que por los comentarios en el foro no hay mayores problemas de
compatibilidad.
El primer problema que he encontrado ha sido con el operador "IN" de
xHarbour que utilizamos con cierta frecuencia. Después de indagar en
Internet he conseguido que aparentemente este operador no existe en
Harbour, en tal sentido he preparado una pequeña función que intenta
hacer algo similar, aunque entiendo que no será con la misma eficiencia
que lo hace el operador "IN" en xHarbour. Este es el código:
// -----------------------------------------
FUNCTION IN(xPar1, xPar2)
LOCAL lRetVal := .F.
TRY
DO CASE
CASE ValType(xPar1) = "C" .AND. ValType(xPar2) = "C"
lRetVal := xPar1 $ xPar2
CASE ValType(xPar2) = "A"
lRetVal := AScan(xPar2, { |x| xPar1 = x }) > 0
ENDCASE
CATCH
END
RETURN lRetVal
// -----------------------------------------
y la forma de hacer la comparacion seria
IF IN("rojo", {"blanco", "verde", "rojo"}
...
ENDIF
en lugar de
IF "rojo" IN {"blanco", "verde", "rojo"}
...
ENDIF
Se les ocurre otra forma diferente de implementar esto?
Agradecido por sus comentarios
Saludos
Williams Pacheco