FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Busqueda numerica por aproximacion
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Busqueda numerica por aproximacion
Posted: Fri Aug 19, 2016 12:20 AM

Saludos amigos del foro.
Tengo necesidad de una funcion para buscar valores numericos por aproximacion, en una tabla dbf.
Agradeceré mucho si alguno de ustedes ya la ha desarrollado y pueda compartirla.

Saludos.

Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Busqueda numerica por aproximacion
Posted: Fri Aug 19, 2016 12:23 AM

No entiendo bien lo que quieres decir
El número más aproximado al introducido?
Está ordenado por ese campo la base de datos?

Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo

El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Busqueda numerica por aproximacion
Posted: Fri Aug 19, 2016 12:32 AM
cnavarro wrote:No entiendo bien lo que quieres decir
El número más aproximado al introducido?
Está ordenado por ese campo la base de datos?


Gracias por contestar.
Asi es, el valor mas aproximado al introducido (o tomado de otra tabla).
La tabla está ordenada de manera ascendente por estos valores, y muchos de ellos se repiten (esto ultimo no tengo problema en controlar, con otro campo).

Nuevamente gracias por cualquier sugerencia o código.

Saludos.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Busqueda numerica por aproximacion
Posted: Fri Aug 19, 2016 12:38 AM

Se me olvidó comentar que al usar DbSeek(nValue,.t.) y no encontrar el valor, el cursor se sitúa en el siguiente registro.
El caso es que el valor aproximado a encontrar puede ser mayor o menor al valor digitado.
Gracias.

Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Busqueda numerica por aproximacion
Posted: Fri Aug 19, 2016 02:05 AM

Bien, te cuento lo que se me ocurre
Como el DbSeek( uval, .T. ) se sitúa en el valor superior al buscado, coge la diferencia con el anterior y posterior y compruebas cuál es el más aproximado
Se me debe escapar algo que no te he entendido porque seguro que esa solución ya la habías pensado
Lo segundo es hacer una búsqueda "dicotómica" a mano
Saludos

Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo

El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Busqueda numerica por aproximacion
Posted: Fri Aug 19, 2016 02:21 AM
Cristobal.
Muchisimas gracias.
Efectivamente, asi la he finalizado, comparando valores de registro anterior y registro donde se colocó el cursor, y el de menor diferencia lo tomo como el mas aproximado.
Aqui esta la funcioncita, algo "chapiolla", pero me funciona.

Code (fw): Select all Collapse
if misgets("Buscar valor aproximado","","Introduzca valor",@nVal,"lupa",.t.)
   if !(cAlias)->(dbSeek(nVal,.t.))
       msginfo("No encontrado valor exacto")
       nRec := Recno()
       dbskip(-1)
       nValAnt := Abs( nVal - field->debe )
       dbskip()
       nValPos := Abs( nVal - field->debe )
       nValAprox := Min(nValAnt,nValPos)   
       MsgInfo("Valor aproximado es "+Transform(nValAprox,"999,999,999.99"))
       if nValAnt < nValPos
          dbskip(-1)
       endif 
       oBrw3:Refresh()
       MsgInfo("Valor a buscar  " + Transform(nVal,"999,999.99") +CRLF+;
               "Valor anterior  " + Transform(nValAnt,"999,999.99") +CRLF+;
               "Valor Posterior " + Transform(nValPos,"999,999.99") +CRLF+;
               "Valor Aproximado " + Transform(nValAProx,"999,999.99") )
   endif
endif

Saludos, y nuevamente agradezco tu interés.

Francisco

EDITADO...
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Busqueda numerica por aproximacion
Posted: Fri Aug 19, 2016 03:26 AM

Francisco, creo que te falta en los DbSkip controlar el Eof() y el Bof()

Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo

El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Busqueda numerica por aproximacion
Posted: Fri Aug 19, 2016 12:34 PM
cnavarro wrote:Francisco, creo que te falta en los DbSkip controlar el Eof() y el Bof()

Tienes toda la razón. Voy a modificarla.
Muchas gracias.
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql

Continue the discussion