FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Algoritmo para comparacion de cadenas
Saludos a todos.
Aunque llevo mucho tiempo entrando a este foro, investigando en el tan completo histórico de respuestas, nunca me había decidido a darme de alta. Me da hasta un poco de pena intentar responder algo entre tantos gurús.... Pero ahora tengo una gran necesidad acerca de un algoritmo y apelo a ustedes para que me den cualquier idea. Programo con Delphi7 y SQL Server 2005. Y el asunto es el siguiente: Los pongo en antecedentes: Tengo una tabla MARCADOS con un campos Nombre nChar(200) (No se puede separar el nombre en apellidos ni nada, debe ser así porque es información que viene de fuente externa). En este campo tengo nombres en distinos idiomas, incluso indios, árabes, etc Ej: "Thiha Thura Tin Aung Myint" En un archivo texto me entregan una lista de nombres (subí esa lista a otra tabla para guardar esos nombres). Así que tengo otra tabla INVESTIGADOS con campos Nombre nchar(200) igual que la anterior.... y un campo Existe bit donde marco si el registro de INVESTIGADOS existe en MARCADOS. Con estos antecedentes mi problema está en que la comparación no es exacta, debo seguir estas reglas, que les voy a dar con un ejemplo: Si en MARCADOS está el nombre "ossama bin laden" y en INVESTIGADOS viene como "sama laden" debe marcarse el campo Existe como True.. Cualquier idea será muy bien recibida. Muchas gracias a todos. |
#2
|
||||
|
||||
Hola..
Podrias utilizar el operador LIKE, para realizar eso...Solo deberias preguntar si la sub-cadena, en este caso correpondiente a parte del nombre, existe, entonces actualizas ese campo como marcado. mira este hilo http://technet.microsoft.com/es-es/l.../ms179859.aspx. Espero haberte ayudado en algo... |
#3
|
|||
|
|||
gracias
Muchas gracias.
Creo que si me sirve mucho lo que me dices. A ver esta idea que te parece... Es cuestión que después que la implemente funcione bien... ya los pondré al tanto. Bueno. Se me ocurre tomar el campo Investigados.Nombre y crear tantas cadenas como palabras existen en nombre: Ej: "Thiha Thura Tin Aung Myint" daría como resultado 5 cadenas de caracteres Fabricar la sentencia select con tantos likes como cadenas resultaron, algo así: Select nombre FROM Marcados WHERE (Nombre LIKE '%cadena1%') AND (nombre LIKE '%cadena2%') etc... Funcionará? Les parece bien? Por favor comenten lo que se les ocurra... Gracias de nuevo. |
#4
|
|||
|
|||
Usar SQL!
Esa idea no esta mala. Pero cuidado a la hora de redactar tu consulta. Ademas tratare de ayudarte para buscar una mejor forma de hacer lo que dices!
|
#5
|
||||
|
||||
Vas a tener muchos falsos positivos, pero en fin....
En lugar de "LIKE" usa "CONTAINS" parece más versatil. Pero no te atañas a lo dicho aquí, en esa web puedes mirar otras opciones. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#6
|
|||
|
|||
Muchas gracias nuevamente.
Estuve con el tema de utilizar CONTAINS, pero me marca este error: "No se puede usar el predicado CONTAINS o FREETEXT en tabla o vista indizada 'marcador', porque no está indizado por texto. Sugerencias? |
#7
|
||||
|
||||
Por lo visto tienes que crear un índice en la base de datos por el campo donde vas a usar contains.... qué se le va a hacer ...
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#8
|
|||
|
|||
Cita:
Por lo del CONTAINS, no tengo idea de como hacerlo, pero ya Lepe te ha dado un tip. Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney Última edición por egostar fecha: 14-11-2007 a las 21:51:43. |
#9
|
|||
|
|||
Bueno. Muchas gracias a todos, hayan o no participado porque sé que el que no contestó es porque vió que ya el curso a seguir estaba dado.
Para cerrar el asunto les cuento que me fuí con la variante de BuenaOnda, crear tantos LIKE como cadenas tiene el nombre a buscar. Intenté con CONTAINS pero, por las características de la aplicación, es bastante enredoso eso de crear el índice compuesto y el catálogo, y después distribuirlo, mantenerlo actualizado, etc, etc.... Por otra parte no supe como hacer que CONTAINS o FREETEXT me compararan solo una parte de la cedena, utilizando el * como comodín solo me sirve para las terminaciones. Ej: Marcel* me localiza todos los registros con prefijo "Macel", pero esto *arcel* no funciona..... En fin, esto es solo una historia corta para agradecerles nuevamente y asunto terminado, a entrarle a algo nuevo ahora. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Procedimientos para separar cadenas | ixMike | Varios | 14 | 12-09-2016 04:51:21 |
Algoritmo para calcular el BPM | turminator | Varios | 0 | 29-05-2007 00:19:49 |
comando en sql para comparar cadenas | karla | SQL | 2 | 30-12-2006 22:55:12 |
Algoritmo para obtener las letras de etiqueta en personas físicas. Anagrama. | setry2 | Varios | 0 | 18-07-2005 15:55:36 |
comparación de cadenas | perico | Varios | 1 | 22-06-2004 23:52:28 |
|