Mi pregunta es la siguiente, necesto saber si hay alguna funcion que busque un caracter determinado dentro de una cadena de caracteres, se que existe la funcion AT(), pero es muy lenta, en una base de datos que tiene sobre 500.000 registros.
tengo una base de dato bastante grande con un campo RDESCRIP largo 150 caracter
necesito buscar una palabra determinada que puede estar una o mas veces dentro del campo, la idea es que a medida que vaya escribiendo se vaya filtrando la informacion, ahora la palabra o caracter puede estar al principio, al medio o al final del registro.
ejemplo
si yo presiono la letra A, debiera msotrarme todos los registro que contienen la letra A, si acontinuacion presiono la B, debiera encontrarme todo loa que contenga AB.
espero habreme explicado
gracias por la ayuda
Busqueda de unos caracteres
-
- Posts: 323
- Joined: Wed May 16, 2007 9:40 pm
- Location: Region de Ñuble, Chile
- Antonio Linares
- Site Admin
- Posts: 42521
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 76 times
- Contact:
La función At() es extremadamente rápida ya que practicamente esta implementada al 100% en el propio microprocesador.
Lo que es lento es ir leyendo los registros de uno en uno. La solución a esto, aunque suene increible, es cargar de una vez toda la DBF en memoria usando MemoRead() y entonces hacer el At():
cDatos = MemoRead( "nombre.dbf" )
nPos = At( "lo que busco", cDatos )
Dividiendo el valor devuelto por At() por el tamaño de un registro (+ el tamaño de la cabecera) sabemos inmediatamente en que registro estamos. El siguiente At() se haría a partir de donde se encontró la primera ocurrencia.
Está técnica la implementamos en su día en una base de datos "documental" y los resultados fueron espectaculares. Espero que te sirva![Smile :-)](./images/smilies/icon_smile.gif)
Si la base de datos es extremadamente grande, se iría leyendo en bloques grandes de memoria.
Lo que es lento es ir leyendo los registros de uno en uno. La solución a esto, aunque suene increible, es cargar de una vez toda la DBF en memoria usando MemoRead() y entonces hacer el At():
cDatos = MemoRead( "nombre.dbf" )
nPos = At( "lo que busco", cDatos )
Dividiendo el valor devuelto por At() por el tamaño de un registro (+ el tamaño de la cabecera) sabemos inmediatamente en que registro estamos. El siguiente At() se haría a partir de donde se encontró la primera ocurrencia.
Está técnica la implementamos en su día en una base de datos "documental" y los resultados fueron espectaculares. Espero que te sirva
![Smile :-)](./images/smilies/icon_smile.gif)
Si la base de datos es extremadamente grande, se iría leyendo en bloques grandes de memoria.
Antonio,
Yo tambien estoy usando la función At() para la busqueda de cadenas de caracteres.
Me encuentro con el problema de que si le digo que busque la palabra "hipo", ma va a encontrar indistintamente de si forma parte o no de otra cadena de caracteresa, es decir,
hipo hipopotamo hipocondriaco, etc etc
No consigo hacer que solo encentre la palabra sola "hipo"
He probado así como sigue
At( " hipo ", cTxt )
Pero parece no encontrar diferencia entre eso y esto otro:
At( "hipo", cTxt )
¿alguna sugerencia?
![Confused :?](./images/smilies/icon_confused.gif)
Yo tambien estoy usando la función At() para la busqueda de cadenas de caracteres.
Me encuentro con el problema de que si le digo que busque la palabra "hipo", ma va a encontrar indistintamente de si forma parte o no de otra cadena de caracteresa, es decir,
hipo hipopotamo hipocondriaco, etc etc
No consigo hacer que solo encentre la palabra sola "hipo"
He probado así como sigue
At( " hipo ", cTxt )
Pero parece no encontrar diferencia entre eso y esto otro:
At( "hipo", cTxt )
¿alguna sugerencia?
![Confused :?](./images/smilies/icon_confused.gif)
- Antonio Linares
- Site Admin
- Posts: 42521
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 76 times
- Contact:
- FranciscoA
- Posts: 2163
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Busqueda de unos caracteres
elmoiquique wrote:Mi pregunta es la siguiente, necesto saber si hay alguna funcion que busque un caracter determinado dentro de una cadena de caracteres, se que existe la funcion AT(), pero es muy lenta, en una base de datos que tiene sobre 500.000 registros.
tengo una base de dato bastante grande con un campo RDESCRIP largo 150 caracter
necesito buscar una palabra determinada que puede estar una o mas veces dentro del campo, la idea es que a medida que vaya escribiendo se vaya filtrando la informacion, ahora la palabra o caracter puede estar al principio, al medio o al final del registro.
ejemplo
si yo presiono la letra A, debiera msotrarme todos los registro que contienen la letra A, si acontinuacion presiono la B, debiera encontrarme todo loa que contenga AB.
espero habreme explicado
gracias por la ayuda
Revisen el ejemplo que he posteado, talvez les sirva.
Saludos.
Francisco J. Alegría P.