Valeur identique

marty14400 Messages postés 21 Date d'inscription lundi 19 août 2013 Statut Membre Dernière intervention 15 mars 2015 - 15 mars 2015 à 18:59
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 17 mars 2015 à 20:37
Bonjour,
Je bloque sur un petit soucis et peut être que vous pourriez m'aider car je n'arrive pas à coder ceci :
Text1.text="LE SOLEIL 1234567 EST CHAUD"
Text2.text="LE SOLEIL EST 1234567 CHAUD"

Comment détecter une partie de chaîne identique dans deux contrôles , sans la connaitre, variable et générer une action ?
Dans le cas présent 1234567
Merci de votre aide.

9 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 15/03/2015 à 19:47
Bonjour,
Peux-tu être beaucoup plus précis ?
1) Dans l'exemple que tu montres, 1234567 n'est pas la seule "partie identique). Pourquoi celle-là et pas les autres, alors ?
2) qu'entends-tu exactement par "partie" ? seulement des mots entiers séparés par un espace ou toute sous-chaîne de caractères, avec ou sans espace ?
Que cette comparaison se fasse entre deux contrôles, n'a rien à voir et n'est pas à préciser. Ton problème concerne la comparaison de deux chaînes de caractères, qu'elles soient ou non dans un contrôle.

PS : où en es-tu de cette discussion, laissée en plan (et qui reste donc ouverte) ? :
http://codes-sources.commentcamarche.net/forum/affich-10008014-textbox-redimenssion
et celle-ci :
http://codes-sources.commentcamarche.net/forum/affich-10007073-boucle-probleme
?
Merci de bien vouloir observer les règles de ce forum.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
marty14400 Messages postés 21 Date d'inscription lundi 19 août 2013 Statut Membre Dernière intervention 15 mars 2015
15 mars 2015 à 20:20
Bonjour et merci de ton intervention,
effectivement pour être plus précis il s'agit d'une comparaison de deux chaines de caractère avec ou sans espace, le contenus est variable toutefois dans les deux chaines seule la valeur numérique m'intéresse.
Donc Je veux m'assurer que la CHAINE1 possède bien dans son contenu une valeur numérique, identique et contenue dans la CHAINE2 en faisant abstraction du texte

Pour exemple : CHAINE1 :"ceciestuntexteimprovisé1264567avecunevaleurnumérique"

CHAINE2 : "maiscependantnous1264567pourrionsl'ecrireaussicommeca"

Un oublis de ma part concernant les autres posts, que je viens de signaler en résolus à l'instant.
Désolé
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
15 mars 2015 à 20:47
Bonsoir, tu peux regarder du coté des Regex pour extraire uniquement des nombres qui se suivent d'une chaine.
Tu dois aussi pouvoir y arriver avec l'opérateur Like.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 15/03/2015 à 20:59
Je vais te répondre ainsi :
regarde ce que fait ceci :
toto = "toto = "ceciestuntexteimprovisé1264567avecunevaleurnumérique""
Do While Val(toto) = 0
toto = Mid(toto, 2)
Loop
MsgBox Val(toto)

le reste "coule de source", non ?

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
marty14400 Messages postés 21 Date d'inscription lundi 19 août 2013 Statut Membre Dernière intervention 15 mars 2015
15 mars 2015 à 23:29
Merci beaucoup ! juste petit soucis j'ai deja une boucle existante pour la manipulation de ma chaine ! une autre solution possible ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
16 mars 2015 à 09:11
Une autre solution sans boucle ?
Oui, mais bien plus compliquée !
Tu dis avoir déjà une boucle. Et alors ? Je ne vois pas quel est le problème !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 mars 2015 à 06:36
Où en es-tu ?
Regarde ===>>
Private Sub Command1_Click()
If num_int(Text1.Text) = num_int(Text2.Text) Then
MsgBox "oui"
Else
MsgBox "non"
End If
End Sub

Private Function num_int(chaine As String) As String
num_int = chaine
Do While Val(num_int) = 0
num_int = Mid(num_int, 2)
Loop
num_int = Str(Val(num_int))
End Function

0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
17 mars 2015 à 08:17
Bonjour, je pense que ça serait plus simple avec une regex qui cherche chaque succession de chiffre, ensuite on compare la collection d'occurrences du string1 à la collection d'occurrence du string2.

			Dim s1 As String = "Le même texte au début 1234, 123456, pas le même texte à la fin"
			Dim s2 As String = "Le même texte au début 123, 123456; une fin alternative"

			Dim maRegex As New Regex("\D(\d)+\D")
			Dim occurcences1 As MatchCollection = maRegex.Matches(s1)
			Dim occurcences2 As MatchCollection = maRegex.Matches(s2)


Attention je l'ai écrit vite fait, la virgule est prise pour un caractère numérique et il faut peut être traiter les cas ou le texte commence ou fini par un chiffre
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 17/03/2015 à 10:27
Bonjour, Whismeril,
Il est en VB6.
Il pourrait le faire, mais :
- en se rendant dépendant de VBS (de sa présence, qui peut avoir été inhibée)
- en constituant et alimentant deux collections, sur lesquelles il devra boucler.
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656 > ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018
Modifié par Whismeril le 17/03/2015 à 11:55
Salut Uc
Il est en VB6
oh j'ai pas fait attention ce matin, réveil un peu dur....
Mais avec Like et deux tableaux ça doit le faire aussi ;-)!
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
17 mars 2015 à 11:45
Bonjour
c'est un peu plus compliqué

Dim str1 As String
Dim str2 As String
Dim strnum As String
Dim index1 As Integer
Dim p As Integer
Dim indexl As Integer
Dim indexr As Integer
Dim found As Boolean
found = False
str1 = "bnbnvbvbv923456bfbfgfgfg"
str2 = "teerereorfgfgdfd923456tytytryrt"
index1 = 1
'on cherche le premier chiffre
While index1 < Len(str1) And Not found
p = Asc(Mid(str1, index1, 1))
If (p >= 48) And (p <= 57) Then
indexl = index1
found = True
Else
index1 = index1 + 1
End If
Wend
found = False
'on cherche le caractère non chiffre
While index1 < Len(str1) And Not found
p = Asc(Mid(str1, index1, 1))
If (p < 48) Or (p > 57) Then
indexr = index1
found = True
Else
index1 = index1 + 1
End If
Wend
strnum = Mid(str1, indexl, indexr - indexl)
If InStr(str2, strnum) > 0 Then
'
End If
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 mars 2015 à 18:25
A Whismeril,
Sous VB6, en fait, on éviterait carrément la fonction asc, privilégiant une conversion dans un sens, puis l'autre.
Bien que je sois persuadé de ce que marty14400 n'a qu'un numéro à identifier et comparer, je vais aller un peu plus loin.
Regarde ==>>
Private Sub CommandButton4_Click()
Dim str1 As String, str2 As String
str1 = "bn102bnvbvbv923456bfbfgfgf1248gh27"
str2 = "teerereorfgfgdfd923456tytytryrt327123hhf"
nums_str1 = Trim(num_int(str1))
nums_str2 = Trim(num_int(str2))
MsgBox nums_str1 & vbCrLf & nums_str2
End Sub

Private Function num_int(chaine As String) As String
Dim tata() As Byte
tata() = StrConv(chaine, vbFromUnicode)
For i = 0 To UBound(tata)
Select Case tata(i)
Case 48 To 57
Case Else
tata(i) = 32
End Select
Next
num_int = Trim(StrConv(tata(), vbUnicode))
End Function

Tu devines le reste (nous avons deux chaînes éclatables par split ===>> deux arrays de numériques à contrôler entre eux.
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
17 mars 2015 à 20:32
Oh, je ne suis pas le seul à avoir eu une journée difficile ;-)....
Je n'ai jamais parlé de Asc.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211 > Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024
17 mars 2015 à 20:37
Ouille !
Ce n'est pas toi, mais ShayW !
Ouille ! Ouille ! je deviens gâteux, moi . ..
Bon ===>> je vais au dodo vite fait bien fait.!
0
Rejoignez-nous