Convertir une string en string selon une algorithme

Résolu
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007 - 11 juin 2005 à 22:13
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007 - 20 juin 2005 à 22:08
Bonsoir
je veux Traduire cet algorithime en code VB :

DONNEES:
le text tapé en textbox1 se transforme en textbox2 selon
-la corespondance des mots: mange se transforme en suite et ka en po
-la coresspondance des lettres (abcdefghijklmnopqrstvwxyz) se transforme en(jbcdefghrjkamdopqrstvwxyz)

-l'algorithme est le suivant :
si je tape des mots separer par des "." et "/" et ","
si il rencontre un "/" " ," ou" ." au debut, à la fin ou les deux(au debut et à la fin) dans un mot, et si ce mot a son correspondance au code, il va le converti selon la correspondance des mots, si non il va le convertir selon la correspondance des lettres

par exemple:
si je tappe on textbox1 : alin/mange/imange/mange doit se transformer en jard/suite/imjdge/suite

40 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
13 juin 2005 à 15:21
puisqu'il n'y a pas de proposition plus simple avec Split, je te met la mienne.

je remet pas le début qui est toujours le même.

et pour Text2 ce sera comme Text1 mais inversé

dis moi d'abord si ça convient ou pas.

sinon j'ai essayé avec Split mais ça simplifie rien du tout



Private Sub Text1_Change()

Dim i As Integer

Dim j As Integer

Dim k As Integer

Dim Lg As Integer

Dim c As String

Dim c1 As String

Dim c2 As String

Dim ch As String

Dim s As String



If bb Then Exit Sub

bb = True



s = Text1.Text

Lg = Len(s)



ch = Replace(s, ".", "/")

ch = Replace(ch, ",", "/")



For i = 1 To Lg

c = Mid$(ch, i, 1)

If c <> "/" Then

k = InStr(s1, c)

If k > 0 Then Mid$(s, i, 1) = Mid$(s2, k, 1)

End If

Next



For j = 0 To UBound(Tabl1)

i = InStr(ch, Tabl1(j))

While i > 0

k = i + Len(Tabl1(j))

If i 1 Then c1 "" Else c1 = Mid$(ch, i - 1, 1)

If k > Lg Then c2 "" Else c2 Mid$(ch, k, 1)

If (c1 "/" And c2 "") Or _

(c1 "" And c2 "/") Or _

(c1 "/" And c2 "/") Then

Mid$(s, i) = Tabl2(j)

End If

i = k + 1

DoEvents

i = InStr(i, ch, Tabl1(j))

Wend

Next



i = Text2.SelStart

Text2.Text = s

Text2.SelStart = i

bb = False



End Sub


Daniel
3
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
11 juin 2005 à 22:26
salut,

c'est un début de solution je pense,

mais il reste un cas qui n'est pas traité,

je te laisse trouver lequel


Private Sub Text1_Change()

Dim i As Integer

Dim j As Integer

Dim k As Integer

Dim Lg As Integer

Dim c As String

Dim s As String



If bb Then Exit Sub

bb = True



s = Text1.Text

Lg = Len(s)



For i = 1 To Lg

c = Mid$(s, i, 1)

If c "." Or c "," Or c = "/" Then

If i < Lg Then

i = i + 1

For j = 0 To UBound(Tabl1)

k = InStr(i, s, Tabl1(j))

If k = i Then


Mid$(s, i) = Tabl2(j)


i = i + Len(Tabl2(j))

End If

Next

i = i - 1

End If

Else

k = InStr(s1, c)

If k > 0 Then Mid$(s, i, 1) = Mid$(s2, k, 1)

End If

Next



i = Text2.SelStart

Text2.Text = s

Text2.SelStart = i

bb = False



End Sub


Daniel
0
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007
11 juin 2005 à 22:39
mais tabl2 est non definie ?
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
11 juin 2005 à 22:43
j'ai pas remis le début parce que c'est le même









Option Explicit



Dim Tabl1() As String

Dim Tabl2() As String

Dim s1 As String

Dim s2 As String

Dim bb As Boolean



Private Sub Form_Load()

s1 = "abcdefghijklmnopqrstuvwxyz"

s2 = "jbcnefghrlkamdopqistuvwxyz"

ReDim Tabl1(3), Tabl2(3)

Tabl1(0) "ja": Tabl2(0) "ny"

Tabl1(1) "ka": Tabl2(1) "po"

Tabl1(2) "mi": Tabl2(2) "wp"

Tabl1(3) "mange": Tabl2(3) "suite"

End Sub


Daniel
0

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

Posez votre question
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007
11 juin 2005 à 22:55
le cas qui n'est pa traiter c'est si je tappe par exemple: manger il se transforme en suiter .
je veux aussi l'effet inverse cad si je tappe qlq chose dans textbox2 se se transforme en textbox1 selon la meme correspondance.
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
11 juin 2005 à 23:31
moi j'ai pas ça ?

avec manger j'ai mjdgei

avec manger/ j'ai mjdei/

le cas pas traité c'est la barre à la fin



sinon avec /manger j'ai /suitei

normal ou pas ?


Daniel
0
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
12 juin 2005 à 03:08
pourquoi pas utiliser replace() ???
ça serais pas moins compliquer et plus rapide


-------------------------------------------------
Dragon alias aussi Waxime mais bon, pas le gout de refaire un nouveau profil lol
-------------------------------------------------
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
12 juin 2005 à 12:58
Salut,

Ok avec dragon, pourquoi ne pas utiliser le replace ? et le split ? Par ex :

Dim t() As String
Dim s As String 'TaChaine


s = Replace(s, ".", "/") 'on remplace les '.' par des '/'
s = Replace(s, ",", "/") 'on remplace les ',' par des '/'


t = Split(s, "/") 'on découpe la chaine en sous chaines

Ensuite, tu fais tes replace mot par mot ou lettres par lettres suivant tes critères en parcourrant le tableau.

for i = 0 to ubound(t)
'...
next

enfin, tu reconstitues ta chaine avec un join(t,"/").

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007
12 juin 2005 à 14:40
Bonjour,

d'abord je suis desolé de repondre en retard car j'ai des etudes


sur Daniel
/manger en /suitei n'est pas normale car manger n'est defini en code
/manger doit se transformer en /mjdgei stp est ce que tu peux ajouter ca aussi.


Sur dragon et CanisLupuc svp est ce que vous pouvez me donner le code complet
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
12 juin 2005 à 14:44
pour moi /manger donne "/mange" & "r" ce qui répond au critère "/mange" --> "/suite"

????

à quel moment il faut tester mot ou lettre ?

Daniel
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
12 juin 2005 à 14:51
une autre question

est-ce que rmange/ donne isuite/ ou imjdge/ ?

Daniel
0
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007
12 juin 2005 à 16:06
le code fait toujours des tests parexemple si on tappe /mange ou mange/ il vont se transformer en /suite ou suite/ alors il va les considerer commedes mots, mais si on ajoute par exemple un "r" a /mange ou mange/ cad /manger ou manger/ ou /rmange ou rmange/ il va les considerer comme des lettres cad les transformer en /mjdgei ou mjdgei/ ou /imjdge ou imjdge/
0
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007
12 juin 2005 à 18:38
le code fait toujours des tests parexemple si on tappe /mange ou mange/ il vont se transformer en /suite ou suite/ alors il va les considerer commedes mots, mais si on ajoute par exemple un "r" a /mange ou mange/ cad /manger ou manger/ ou /rmange ou rmange/ il va les considerer comme des lettres cad les transformer en /mjdgei ou mjdgei/ ou /imjdge ou imjdge/
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
12 juin 2005 à 19:09
bien compris elmekki

Daniel
0
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007
13 juin 2005 à 14:58
Bonjour,


j'attend toujours vos reponse , et surtout toi Daniel
0
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
13 juin 2005 à 15:47
comprend pas tout ça pour dequoi de si court a faire

phrase = correctionMot(correctionlettre(phrase))

private sub correctionlettre(phrase as string)
return replace(replace(replace(replace(phrase,"a","j"),"i","r"),"l","a"),"n","d")
end sub

private sub correctionMot(phrase as string)
return replace(replace(phrase,correctionlettre("/ka"),"po"),correctionlettre("/mange"),"suite")
end sub


-------------------------------------------------
Dragon alias aussi Waxime mais bon, pas le gout de refaire un nouveau profil lol
-------------------------------------------------
0
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007
13 juin 2005 à 17:05
Monsieur Daniel merci mille fois , et aussi les autres


C'est exactement ce que je veux

il reste juste quelques petites questions ,
-est ce que je peu redemensionner tabl1 et tabl2 jusqu'a 200 (tabl1(200) et tabl2(200))?
-la dexieume question: c'est pour l'effet inverse cad si j'ecri en text en textbox2 il va se transformer en textbox1 selon la meme algorithme au code
-la troisieme question
Bon cette tache n'est pa interssante mais bon si tu peu l' ajouter ca sera bien , dans la correspondance des mots le code ne remplace que les mots qu'ont le meme nombre des lettres ; par exemple "/ka" ne remplace que "/po" , mais si on ajoute au code "kam" remplace "sd" il ne le fai pa "kam" donne just "/sdm" il donne pa "sd" , mais ce n'est pa tres interressante cette tache, si tu peu l'ajouter le code sera trop complet.

de toute facon merci merci merci
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
13 juin 2005 à 17:37
1) oui tu peux mettre autant que tu veux dans tabl1et tabl2, ça rallonge d'autant le temps de traitement

2) pour Text2 c'est la même chose

3) heu .. non pas prévu avec cette méthode



Private Sub Text2_Change()

Dim i As Integer

Dim j As Integer

Dim k As Integer

Dim Lg As Integer

Dim c As String

Dim c1 As String

Dim c2 As String

Dim ch As String

Dim s As String



If bb Then Exit Sub

bb = True



s = Text2.Text

Lg = Len(s)



ch = Replace(s, ".", "/")

ch = Replace(ch, ",", "/")



For i = 1 To Lg

c = Mid$(ch, i, 1)

If c <> "/" Then

k = InStr(s2, c)

If k > 0 Then Mid$(s, i, 1) = Mid$(s1, k, 1)

End If

Next



For j = 0 To UBound(Tabl2)

i = InStr(ch, Tabl2(j))

While i > 0

k = i + Len(Tabl2(j))

If i 1 Then c1 "" Else c1 = Mid$(ch, i - 1, 1)

If k > Lg Then c2 "" Else c2 Mid$(ch, k, 1)

If (c1 "/" And c2 "") Or _

(c1 "" And c2 "/") Or _

(c1 "/" And c2 "/") Then

Mid$(s, i) = Tabl1(j)

End If

i = k + 1

DoEvents

i = InStr(i, ch, Tabl2(j))

Wend

Next



i = Text1.SelStart

Text1.Text = s

Text1.SelStart = i

bb = False

End Sub


Daniel
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
13 juin 2005 à 17:39
3) peut être avec celle la









Private Sub Text1_Change()

Dim i As Integer

Dim j As Integer

Dim k As Integer

Dim c As String

Dim c2 As String

Dim s As String

Dim T() As String

Dim b As Boolean



If bb Then Exit Sub

bb = True



s = Text1.Text

s = Replace(s, ".", "/")

s = Replace(s, ",", "/")

T = Split(s, "/")



For i = 0 To UBound(T)

c = T(i)

If Len(c) > 0 Then

b = True

If UBound(T) > 0 Then

For j = 0 To UBound(Tabl1)


If c Tabl1(j) Then T(i) Tabl2(j): b = False: Exit For

Next

End If

If b Then

For j = 1 To Len(c)


k = InStr(s1, Mid$(c, j, 1))


If k > 0 Then Mid$(T(i), j, 1) = Mid$(s2, k, 1)

Next

End If

End If

Next



s = Join(T, "/")



j = 0

For i = 1 To Len(s)

j = j + 1

c = Mid$(Text1.Text, i, 1)

If c "." Or c "," Then

k = InStr(j, s, "/")

Mid$(s, k, 1) = c

End If

Next



i = Text2.SelStart

Text2.Text = s

Text2.SelStart = i

bb = False



End Sub


Daniel
0
cs_elmekki Messages postés 114 Date d'inscription mercredi 4 juin 2003 Statut Membre Dernière intervention 18 août 2007
13 juin 2005 à 17:58
pr la troisieme si je met "kam." il se converti en "sd/" je veux just "kam" en "sd" par exemple si je tappe "kam/" il se converti en "sd/", et si "kam." il se converti en "sd." ect....
0
Rejoignez-nous