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
In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Migrando a Xailer 2.7 + Harbour(Operador IN en Harbour)
-
- Mensajes: 165
- Registrado: Mié Jul 08, 2009 5:26 pm
-
- Mensajes: 165
- Registrado: Mié Jul 08, 2009 5:26 pm
Migrando a Xailer 2.7 + Harbour(Operador IN en Harbour)
En el documento "most important differences between Harbour and xHarbour
with some references to Clipper and other compatible compilers like
xBase++,CLIP, FlagShip." que se puede encontrar en:
http://harbour-project.svn.sourceforge. ... harbour-pr oject/trunk/harbour/doc/xhb-diff.txt
se indica en la seccion " $ OPERATOR EXTENSIONS" que es posible utilizar
el operador $ para hacer comprobaciones de este tipo. Por ejemplo
? "abc" $ { "qwe", "abc", "zxc" } // result .T.
? "a" $ { "qwe", "abc", "zxc", { "a" } } // result .F.
Aqui le dejo la referencia para los interesados
Saludos
Williams Pacheco
with some references to Clipper and other compatible compilers like
xBase++,CLIP, FlagShip." que se puede encontrar en:
http://harbour-project.svn.sourceforge. ... harbour-pr oject/trunk/harbour/doc/xhb-diff.txt
se indica en la seccion " $ OPERATOR EXTENSIONS" que es posible utilizar
el operador $ para hacer comprobaciones de este tipo. Por ejemplo
? "abc" $ { "qwe", "abc", "zxc" } // result .T.
? "a" $ { "qwe", "abc", "zxc", { "a" } } // result .F.
Aqui le dejo la referencia para los interesados
Saludos
Williams Pacheco
-
- Mensajes: 165
- Registrado: Mié Jul 08, 2009 5:26 pm
Migrando a Xailer 2.7 + Harbour(Operador IN en Harbour)
Un punto importante que me faltó indicar es que se necesita la siguiente
declaración en Xailer.ch para que funcione
#ifndef __XHARBOUR__
#include "xhb.ch"
#endif
Segun la informacion publicada en el documento de diferencias entre
Harbour y xHarbour (traducido del inglés)
Por defecto el código del núcleo de Harbour no permite utilizar el
operador $ para matrices y generar el mismo error RT que Clipper pero
tiene la suficiente fortaleza en su API OOP para permitir la adición de
esta extensión sin tocar el código del núcleo, incluso por parte del
usuario a nivel de .prg. Esta fue implementada en XHB.LIB por lo que
ambos compiladores pueden compilar y ejecutar este código:
#ifndef __XHARBOUR__
#include "xhb.ch"
#endif
proc main()
? "abc" $ { "qwe", "abc", "zxc" } // result .T.
? "a" $ { "qwe", "abc", "zxc", { "a" } } // result .F.
return
declaración en Xailer.ch para que funcione
#ifndef __XHARBOUR__
#include "xhb.ch"
#endif
Segun la informacion publicada en el documento de diferencias entre
Harbour y xHarbour (traducido del inglés)
Por defecto el código del núcleo de Harbour no permite utilizar el
operador $ para matrices y generar el mismo error RT que Clipper pero
tiene la suficiente fortaleza en su API OOP para permitir la adición de
esta extensión sin tocar el código del núcleo, incluso por parte del
usuario a nivel de .prg. Esta fue implementada en XHB.LIB por lo que
ambos compiladores pueden compilar y ejecutar este código:
#ifndef __XHARBOUR__
#include "xhb.ch"
#endif
proc main()
? "abc" $ { "qwe", "abc", "zxc" } // result .T.
? "a" $ { "qwe", "abc", "zxc", { "a" } } // result .F.
return