Rolando,
rolando wrote:INDEX ON LEFT(EMAIL, at("@",CLIENTES->EMAIL)) + substr(EMAIL,at("@",CLIENTES->EMAIL)+1) TAG EMAIL TO CLIENTES
Sin el -1 al usar left().
no hay ningún error en lo que te puse, y la inclusión del -1 se debe a que la expresión debe 'extirpar' la @ de la string.
at( '@' ,
'abc@cde.xyz' ) => 4
Left(
'abc@cde.xyz', 4 ) => 'abc@' que obviamente no es lo que queremos
Left(
'abc@cde.xyz', 3 ) => 'abc' que es el resultado pretendido.
la expresión tal como tu la pusiste es inócua, no hace nada salvo perder tiempo, pongas en email lo que pongas, siempre te devuelve lo mismo.
Prueba a bajarte el xbscript de xharbour.org y haz pruebas con el procesador de comandos y podrás verificar la efectividad de una u otra versión.
rolando wrote:De todos modos no veo la diferencia porque el substr() se usa dentro de la misma línea para la segunda parte (luego de la @).
Aunque una función se use una vez, llamarla dos veces utiliza el doble de tiempo. Donde se puede quitar una y mejorarla con otra función que lo haga mejor, mejora el resultado total, se invoque o no SUBSTR a posteriori.
En particular, la funcion LEFT genera el resultado reusando la string pasada como argumento, a diferencia de SUBSTR que SIEMPRE crea una copia, y crear una copia de una string es una tarea relativamente lenta.
rolando wrote:Respecto de tu pregunta sobre la RDD, uso índices CDX y por lo que pude comprobar, no permite indexado con caracteres "@".
No estoy de acuerdo. He probado en varios de mis programas que usan indices y el rdd dbfcdx y he añadido registros con la @ en el campo, y los busca y encuentra perfectamente, y los ordena de manera correcta. Para mi DBFCDX sigue siendo inocente hasta que se demuestre lo contrario.
¿Podrias resumir un ejemplo para poder reproducir el fallo? Me imagino tal vez cortando un trozo del codigo y un pedazo de dbf con algunos registros donde se pueda comprobar el fallo se pueda ver de donde proviene el error.
Por las dudas... ¿no te esta fallando en una busqueda incremental o algo así? Tengo un browse que cuando tipeas letras automaticamente hace la busqueda alfabética de lo que has mecanizado, y digitando la @ con AltGr-2 falla, porque el keydown no muestra la @ como tecla, sino el numero 2. Tipeando la @ con Alt + 64 en el teclado numérico funciona perfecto.
Un saludo,
Carlos.