Comparaison approximative

Résolu
chmouette Messages postés 57 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 21 juillet 2005 - 25 mars 2005 à 11:43
chmouette Messages postés 57 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 21 juillet 2005 - 26 mars 2005 à 16:01
Voilà,
un jour au cours de mes pérégrinations sur le site, j'ai vu un article expliquant comment trouver un indice de corrélation entre 2 chaines, et je le trouve plus.
J'explique mon problème pour le cas où qq1 ai une solution.

Il se trouve que pour mon appli, comme j'ai une fonction de recherche, je ne veux pas qu'il soit possible d'entrer de nouvelles valeurs sauf après verification que la valeur n'est pas présente avec un autre format.
Si l'entrée des données était manuelle, ca irait, mais l'entrée se fait à partir de fichiers excel dans lesquels il y a :
- des erreurs de frappe,
- des formats différents dans les champs saisis.
Donc, lorsque l'application rencontre une nouvelle valeur, elle doit chercher les valeurs déjà présentes dans ma base, et proposer un choix entre les valeurs proches.

Cette fonction peut être VB ou SQL, avec une préférence pour SQL (temps de traitement inferieur, car une requête uniquement, et pas un traitement VB sur les résultats d'une requête)

Merci d'avance.
________________________________________________________________________
On ne devrait vivre qu'une minute et demie,
Le temps du premier baiser et du premier demi !

3 réponses

chmouette Messages postés 57 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 21 juillet 2005
25 mars 2005 à 14:53
Finalement j'ai dévoloppé une fonction récursive.
Je la poste, ca poura peut être aider qq1 :

Public Function get_difference(String1 As String, length1 As Integer, String2 As String, length2 As Integer) As Integer
If length1 0 Or length2 0 Then
get_difference = length1 + length2
Else
If StrComp(Left$(String1, 1), Left$(String2, 1)) = 0 Then
'les deux lettres sont égales
' on compare la suite
'*****************************

get_difference = get_difference(Right$(String1, length1 - 1), length1 - 1, Right$(String2, length2 - 1), length2 - 1)
Else
get_difference = 1 + Min(get_difference(Right$(String1, length1 - 1), length1 - 1, Right$(String2, length2 - 1), length2 - 1), _
get_difference(String1, length1, Right$(String2, length2 - 1), length2 - 1), _
get_difference(Right$(String1, length1 - 1), length1 - 1, String2, length2))
End If
End If
End Function

avec :


Private Function Min(a As Integer, b As Integer, c As Integer) As Integer
If a < b Then
If a < c Then
Min = a
Else
Min = c
End If
Else
If b < c Then
Min = b
Else
Min = c
End If
End If
End Function

Pour l'appel premier :
get_difference(String1, Len(String1), String2 , len(String2))

Si il y a des idées d'optimisation je suis preneur!
++

On ne devrait vivre qu'une minute et demie,
Le temps du premier baiser et du premier demi !
3
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
25 mars 2005 à 20:28
Salut, as-tu regardé du côté de l'opérateur LIKE ? Ca te simplifierait surement la vie.

ex :
if lcase(variabletexte) like "a*" sera vrai pour toutes les variabletexte débutant par "a" ou "A". Etc, on peut combiner les * et les ?.
if variabletexte like "a?c*" sera vrai pour toutes les variables ayant un "a" en 1ère position et un "c" en 3ème position.

Si tu veux plus d'explik ....

Loup Gris
0
chmouette Messages postés 57 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 21 juillet 2005
26 mars 2005 à 16:01
il faudra que j'essaie de remplacer les espaces et les différents
séparateurs pas une *, mais ca ne résoudra pas les problèmes d'erreur
de frappe dans les fichiers à importer...

j'essaie quand même de voir ca mardi au taf...

peut être remplacer les séparateurs par *, et faire une requête en
remplacant un charactère à la fois... ce serait peut être lourd... je
teste, et je poste les résultats...



merci!

On ne devrait vivre qu'une minute et demie,
Le temps du premier baiser et du premier demi !
0
Rejoignez-nous