Delphi - Comparar cadenas que no son exactas

 
Vista:

Comparar cadenas que no son exactas

Publicado por Ruby (3 intervenciones) el 21/09/2005 11:47:23
Hola a todos.....soy nueva en esto y no controlo aún muy bien. Tengo un pequeño problema y es que necesito alguna función que me diga si el valor que yo le doy se encuentra dentro de una cadena ya almacenada.

Aqui os pongo el ejemplo:

Tengo una tabla llamada artículos donde tengo almacenados una serie de valores. En delphi me he creado un formulario desde donde agrego registros a esa tabla. Pues bien, lo que kiero hacer es antes de almacenar un valor, es comprobar que no exista. Entonces para ello he creado una consulta que me busque si está o no ese valor. Hasta ahi creo que el planteamiento es correcto.

el problema me viene que si por ejemplo el valor que yo tengo almacenado en la tabla articulos es (Disco duro) y yo cuando le paso el parametro de busqueda pongo (Disco duro.) (es decir el valor disco duro mas un "." o una "," o cualquier otra letra más, incluso un espacio) me dice que ese articulo no existe y me lo almacena.

En fin, necesito algun procedimiento que vea que aunque yo ponga (Disco duro.) me diga que ya tengo almacenado el disco duro en esa tabla.

No se si me he explicado bien, pero por favor si alguien pudiera ayudarme, sería genial. Muchas gracias a todos.....Saludos desde Murcia.!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Comparar cadenas que no son exactas

Publicado por BigLuis (713 intervenciones) el 21/09/2005 12:29:09
Hola Murciano. Te voy a dar mi opinion, aunque de ninguna manera pienses que es la correcta o que es totalmente inequivoco lo que diga.
Creo que lo que pretendes es dificilisimo de implementar. Probablemente deberias crear una red neuronal. Me explico. ¿ Como va a saber el programa que cuando intentes introducir "Disco duro-," te ha de buscar las dos palabras y no solo Disco o solo Duro y descartar el resto de caracteres? ¿y cuando introduzcas un registro con diez palabras?.
La cosa no funciona asi en las bases de datos. Lo que te busca es la coincidencia exacta (encualquie parde del campo pero coincidencia eacta) con el valor que le pasas como parametro. Para ello deberias hacer los filtros por cadenas o grupos de palabras lo mas sencillas posibles, por ejemplo disco duro sin caracteres o ESPACIOS (cuidado que tambien los tiene en cuenta) adicionales y si existe el registro "Tengo un Disco duro, marca Segate" te lo encontrará. Para ello tambien has de crear una normalizacion para la introduccion de de los registros ya que si una persona introduce "Disco Duro" y otra "DiscoDuro" solo te encontrara uno.
Bueno, una solucion podria ser crear una rutina que te limpiara la cadena de los caracteres que no quisieras pero ello no varia la filosofia anterior.
Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Comparar cadenas que no son exactas

Publicado por RuBy (3 intervenciones) el 21/09/2005 12:48:10
En primer lugar, muchas gracias por contestar, como te he dicho soy nueva en esto y a lo mejor aún no hago buenos planteamientos para programar...
Muchas gracias por tu respuesta... voy a intentarlo mediante lo que tu me dices.

Hay algún procedimiento definido en delphi que me pueda ayudar a buscar una cadena de caracteres dentro de otra?? jejejejejejejeje....No se si me estoy liando otra vez....Bueno de todas formas, gracias por aclararme un poquillo....

P.D: Por cierto, soy murciana, no murciano....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Comparar cadenas que no son exactas

Publicado por BigLuis (713 intervenciones) el 21/09/2005 13:16:53
Perdon murciana.
Hola Ruby, asi no me equivoco.
Si lo que quieres es buscar en un registro de un tabla te aconsejo que emplees SQL por ejemplo
Query1.SQL.Add('Select * from Tabla where Campo LIKE :Quebusco')
Query1.Parambyname('Quebusco').asstring:='%'+Lapalabraabuscar+'%';
Query1.Open.
if query1.Recordcount>0 ya existe la palabra
Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Comparar cadenas que no son exactas

Publicado por RuBy (3 intervenciones) el 21/09/2005 13:32:55
Muuuuchas gracias por tu ayuda!!
A partir de aquí creo que ya me voy a entender yo solita!!
Besosssss
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Comparar cadenas que no son exactas

Publicado por mamcx (12 intervenciones) el 21/09/2005 17:11:38
Aparte de las ideas de BigLuis te cuento que existe otras alternativas. Basicamente lo que necesitas es un "Parser" que sepa que es una palabra (en los idiomas occidentales es *generalmente* cualquier cosa separada por un espacio) y que elimine las diferencias no relevantes (como mayusculas y potencialmente tildes y demas).

Estoy haciendo una libreria especializada para este tipo de tareas y muchas mas, que son muy complejas o imposibles de realizar mediante los componentes tradicionales. Esta en Delphi, es Open Source y aunque aun no esta completa, la buena noticia es que lo que busca ya esta ;)

Puedes ver un ejemplo del codigo (te lo puedes bajar gratis!) aqui:

http://sourceforge.net/projects/mutis

Te voy a mostrar un ejemplo del uso:

http://cvs.sourceforge.net/viewcvs.py/mutis/Mutis/Test/TestAnalyzers.pas?rev=1.3&view=markup

que es parte de la libreria de prueba...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Comparar cadenas que no son exactas

Publicado por mamcx (12 intervenciones) el 21/09/2005 17:22:27
Una aclaracion: Te tocaria hacer una carga de toda la lista de la Base de datos. Sin crear un indice (similar a lo que te dijo BigLuis) seria mas lento.

Ahora si usas Sql Server o MySql existe una solucion del pobre... me avisas si es asi te digo la alternativa...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar