Remplacement d'une chaîne de caractères

Résolu
phenrent76 Messages postés 13 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 3 mars 2005 - 30 janv. 2005 à 20:34
phenrent76 Messages postés 13 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 3 mars 2005 - 1 févr. 2005 à 00:20
bonjour - je cherche dans un fichier texte, à remplacer une chaîne de caractères qui commence et qui fini toujours par trois caractères identiques. j'ai testé un morceau de code
découvert sur le site, mais j'ai une erreur, du au fait que cette fameuse chaîne, mème si le milieu est différent, présente des similitudes quant au début et à la fin de la chaîne, et qu'elle
se répète à plusieurs reprises. quelqu'un peut t'il me donner un petit coup de pouce. merci

Function RemplA()
res = vbNullString
txt = RichTextBox2.Text
remp1 = "dbl"
remp2 = "fdl"
remp3 = "ma chaine de remplacement"
'Function Remplacer(Dans, De, JusquAu, Par)
RichTextBox5.Text = res
res = Remplacer(txt, remp1, remp2, remp3)
Open nomfich For Output As #1
Print #1, res
Close #1
End Function

précision, cette chaîne à une longueur fixe de 60 caractères.

7 réponses

phenrent76 Messages postés 13 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 3 mars 2005
1 févr. 2005 à 00:20
Vu, ok, merci pour tout tes conseils, j'ai réussi en mettant stringtoreplace = Mid(Dans, pos1, pos2 - pos1 + 3), le 3 correspondant à la longueur de ma balise. par contre contrairement à tes prévisions, je t'assure que la chaîne recherchée se répète environ 90 fois, et sans boucle, la mise à jour se fait sans problèmes par ma balise de remplacement, et ce dans le texte entier. ne me demande pourquoi, mais ca fonctionne.
encore un grand merci à toi - cordialement
3
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
30 janv. 2005 à 23:35
salut ,



voila un bout de code fonctionnel qaue j'ai fait en 2 minutes

qui permettra de te guider,

j'ai alleger la structure au maximum et gerer le cas ou selument 1 texte est à remplacer a toi de mettre une boucle

attention

les 1 dans la fonction de replace est importante sinon le debut de la chaine est avalé



Private Sub Command1_Click()



res = vbNullString

txt = "<html> My texte </html>"

remp1 = ""

remp2 = ""

remp3 = "ma chaine de remplacement"

'Function Remplacer(Dans, De, JusquAu, Par)



res = Remplacer(txt, remp1, remp2, remp3)



MsgBox res

End Sub



Function Remplacer(Dans, Deb, JusquAu, Par) As String

pos1 = InStr(1, Dans, Deb)

pos2 = InStr(pos1, Dans, JusquAu)

MsgBox pos1

MsgBox pos2

If pos1 = 0 Then

MsgBox "erreur debut de chaine"

End If

If pos2 = 0 Then

MsgBox "erreur fin de chaine"

End If

stringtoreplace = Mid(Dans, pos1 + Len(Deb), pos2 - Len(JusquAu) - pos1+1)

Dans = Replace(Dans, stringtoreplace, Par, 1)

Remplacer = Dans



End Function





resultat

"<html>ma chaine de remplacement</html>"



voila

bonne prog
0
phenrent76 Messages postés 13 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 3 mars 2005
31 janv. 2005 à 00:32
Désolé, mais je suis totalement novice alors .... beaucoup de compréhension .. je met le code original
Private Sub Command1_Click()
res = vbNullString txt RichTextBox2.Text ( qui contient le texte à modifier ) Dans remp1 Text4.Text ( normalement DBL- ) De remp2 Text5.Text ( ... -FDL ) JusquAu remp3 Text6.Text ( ... ;@EN) Par
RichTextBox5.Text = res ( qui me réaffiche le texte modifié )
'res = Remplacer(txt, "DBL-", "-FDL", ";@EN")
res = Remplacer(txt, remp1, remp2, remp3)
Open nomfich For Output As #1
Print #1, res
Close #1
MsgBox " Remplacement(s) éffectué(s) ! "
End Sub

el la fonction ...

Function Remplacer(Dans, De, JusquAu, Par)
Do While InStr(Dans, De) <> 0 And InStr(Dans, JusquAu) <> 0
Gauche = Left(Dans, InStr(Dans, De) - 1)
Droite = Right(Dans, Len(Dans) - InStr(Dans, JusquAu) - Len(JusquAu) + 1)
Dans = Gauche & Par & Droite
Loop
Remplacer = Dans
'Mavar = Remplacer(Page, "<", ">", "")
End Function

voilà, si tu peux modifier ces quelques lignes en gardant mes critères, çà m'aiderait beaucoup , pour une boucle, je pense pouvoir y arriver, mais pour le reste .... je galère
...
merci
0
phenrent76 Messages postés 13 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 3 mars 2005
31 janv. 2005 à 01:11
Ok - je vais me coucher un peu plus tard mais j'ai trouvé çà fonctionne, mais j'ai une petite erreur :

Private Sub Command5_Click()
res = vbNullString
txt = RichTextBox2.Text remp1 Text4.Text ' "DBF" '"" remp2 Text5.Text ' "FDL" '"" remp3 Text6.Text ' "xxxxx" ' "ma chaine de remplacement"
RichTextBox5.Text = res
res = Remplacer(txt, remp1, remp2, remp3)
Open nomfich For Output As #1
Print #1, res
Close #1
End Sub

mais çà me donne cette réponse : DBFxxxxxDL alors qu'il ne
devrait rester que xxxxx

merci à toi nhervagault
Si quelqu'un à une solution. cordialement
0

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

Posez votre question
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
31 janv. 2005 à 16:36
Les html x'etait pour m'amuser desolé que ca t'a perturbé



Len(Deb) et len('jusqua) sont a enlever si tu veux que xxxxxxx



voila
0
phenrent76 Messages postés 13 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 3 mars 2005
31 janv. 2005 à 19:56
Voilà j'ai modifié comme çà :

stringtoreplace = Mid(Dans, pos1 + Len(Deb), pos2 - Len(JusquAu) - pos1+1)
par stringtoreplace = Mid(Dans, pos1, pos2 - pos1 + 1)

comme critère ceux là : DBF (De) - FDL (Jusquau) - xxxxx (Par) et comme nouvelle réponse au lieu de DBFxxxxxDL , j'ai maintenant
xxxxxDL,
je sens que ça devient bon, il manque pas grand chose - merci nhervagault
je précise que même sans boucle, à part l'erreur ci-dessus, la modif s'applique jusqu'à la fin du fichier !

@plus
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
1 févr. 2005 à 00:09
Je ne pense pas que la solution fonctionne si tu as plusieurs fois ton schema(pattern)

dans ton texte.

Oui tout le fichier est traité si et seuelemnt si tu as une seule occurence.

Pour la resolution de ton probleme il faut de tete remettre la len de la balise de fin.



Mid (chaine, debut, longeur)



voila
0
Rejoignez-nous