Busqueda de unos caracteres

Busqueda de unos caracteres

Postby elmoiquique » Sun Feb 17, 2008 9: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
elmoiquique
 
Posts: 316
Joined: Wed May 16, 2007 9:40 pm
Location: Region de Ñuble, Chile

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 42122
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby jfafive » Thu Jun 19, 2008 9: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?
:?
jfafive
 
Posts: 396
Joined: Tue Mar 18, 2008 9:41 pm
Location: Marbella

Postby Antonio Linares » Thu Jun 19, 2008 9: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42122
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Busqueda de unos caracteres

Postby FranciscoA » Mon Aug 18, 2008 1: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.
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 33 guests