FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Busqueda de unos caracteres
Posts: 336
Joined: Wed May 16, 2007 09:40 PM
Busqueda de unos caracteres
Posted: Sun Feb 17, 2008 09:23 PM

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

Fivewin-Xharbour 24.09, Iquique, Chile
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Busqueda de unos caracteres
Posted: Mon Feb 18, 2008 12:10 PM

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.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 396
Joined: Tue Mar 18, 2008 09:41 PM
Busqueda de unos caracteres
Posted: Thu Jun 19, 2008 09:18 AM

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?

:?

Javier,

FWH 8.04 2008
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Busqueda de unos caracteres
Posted: Thu Jun 19, 2008 09:59 AM

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 ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Busqueda de unos caracteres
Posted: Mon Aug 18, 2008 01:14 AM
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.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql

Continue the discussion