Page 1 of 1

Busqueda de unos caracteres

PostPosted: Sun Feb 17, 2008 9:23 pm
by elmoiquique
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

PostPosted: Mon Feb 18, 2008 12:10 pm
by Antonio Linares
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 :-)

Si la base de datos es extremadamente grande, se iría leyendo en bloques grandes de memoria.

PostPosted: Thu Jun 19, 2008 9:18 am
by jfafive
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?
:?

PostPosted: Thu Jun 19, 2008 9:59 am
by Antonio Linares
Javier,

Aqui estos ejemplos funcionan bien:

MsgInfo( At( "hipo", "hipox hipotalamo" ) ) // 1
MsgInfo( At( "hipo ", "hipohipo talamo" ) ) // 5
MsgInfo( At( "hipot", "hipo hipotalamo" ) ) // 6

Tal vez tengas un CRLF despues de la palabra y no un espacio ?

Re: Busqueda de unos caracteres

PostPosted: Mon Aug 18, 2008 1:14 am
by FranciscoA
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.