Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Fonction de convertion de chaine

10 views
Skip to first unread message

Nico

unread,
Mar 30, 2004, 1:58:30 AM3/30/04
to
Bonjour à tous,

je débute dans la programmation et j'aurais voulu savoir
s'il existe une fonction toute prête qui permette de
remplacer automatiquement tout les accents d'une chaine de
caractère. Ex: tête -> tete, éclipse-> eclipse,....

Je sais qu'il existe la fonction replace, mais elle ne
permet de changer qu'un type de lettre à la fois et
sachant qu'il y a au moins 16 lettres avec des accents, je
me vois mal faire 16 replace.

merci

Jean-Claude BELLAMY

unread,
Mar 30, 2004, 4:19:52 AM3/30/04
to
Dans le message news:12a6001c41624$6880c600$a601...@phx.gbl ,
Nico <anon...@discussions.microsoft.com> s'est ainsi exprimé:

Oh la la, ces p'tits jeunes qui s'arrêtent devant la première difficulté!
;+)
Aucun sens de l'effort ! ;+)

Bien sûr que si, que tu dois te payer n "replace" (ou équivalent)!
Car il n'y a aucune règle logique de codage des lettres accentuées par
rapport aux non accentuées.
Mais on n'en meurt pas pour autant...
Il suffit d'utiliser des tableaux de correspondance et une boucle.

Exemple :

oldcar=array( _
"à", "â", "ä", "á","æ", _
"é", "è", "ê", "ë", _
"î","ï", _
"ô","ö", _
"û", "ü", "ù", _
"ÿ", _
"ç", _
"ñ")
newcar=array( _
"a", "a", "a", "a","a", _
"e", "e", "e", "e", _
"i","i", _
"o","o", _
"u", "u", "u", _
"y", _
"c", _
"n")

For i = 0 To Ubound(oldcar)
str=Replace(str,oldcar(i),newcar(i))
str=Replace(str,ucase(oldcar(i)),ucase(newcar(i)))
Next


NB: ici j'ai conservé la casse
D'où :
- l'absence de paramètre VBtextCompare dans Replace
- la 2ème ligne de remplacement relative aux majuscules

Si on passe tout en minuscules, cela se simplife :

For i = 0 To Ubound(oldcar)
str=Replace(str,oldcar(i),newcar(i),1,-1,VBTextCompare)
Next
--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
http://www.bellamyjc.net Jean-Clau...@wanadoo.fr *
JC.Be...@free.fr


Jean

unread,
Mar 30, 2004, 4:31:45 AM3/30/04
to
Bonjour,

Je suppose que vous ętes en VBScript.

Ce que vous dites est vrai pour la *fonction* Replace de VBScript mais la *méthode* Replace de l'objet RegExp permet de traiter en
*une* passe plusieurs caractčres et ainsi accélérer la procédure (voir script qui suit :
http://automation.eu.tf/retirer_accents_chaine.vbs ).

Fonction Replace de VBScript :
http://msdn.microsoft.com/library/en-us/script56/html/vsfctReplace.asp

Methode Replace de l'objet RegExp (Expression réguličre) :
http://msdn.microsoft.com/library/en-us/script56/html/vsmthReplace.asp

'---8<---Retirer_Accents_Chaine.VBS---Jean-JMST---
'http://automation.eu.tf/retirer_accents_chaine.vbs

MsgBox InputBox("")

Function Retirer_Accents_Chaine(chaine)
chaine=Retirer_Accents(chaine,"a","ā|á|â|ã|ä|å")
chaine=Retirer_Accents(chaine,"e","č|é|ę|ë")
chaine=Retirer_Accents(chaine,"i","ė|í|î|ï")
chaine=Retirer_Accents(chaine,"o","ō|ó|ô|õ|ø")
chaine=Retirer_Accents(chaine,"u","ų|ú|û|ü")
chaine=Retirer_Accents(chaine,"y","ý|ĸ")
chaine=Retirer_Accents(chaine,"į","c")
chaine=Retirer_Accents(chaine,"æ","ae")
chaine=Retirer_Accents(chaine,"ņ","n")
chaine=Retirer_Accents(chaine,"ß","ss")
Retirer_Accents_Chaine=Retirer_Accents(chaine,"o","oe")
End Function

Function Retirer_Accents(texte,caractere,liste)
With New RegExp
.IgnoreCase=False
.Global=True
.MultiLine=True
.Pattern=LCase(liste)
texte=.Replace(texte,LCase(caractere))
.Pattern=UCase(.Pattern)
Retirer_Accents=.Replace(texte,UCase(caractere))
End With
End Function
'---8<---Retirer_Accents_Chaine.VBS---Jean-JMST---


Amicalement,

Jean - JMST
Belgium

"Nico" <anon...@discussions.microsoft.com> a écrit dans le message de news:12a6001c41624$6880c600$a601...@phx.gbl...
Bonjour ā tous,

je débute dans la programmation et j'aurais voulu savoir

s'il existe une fonction toute pręte qui permette de


remplacer automatiquement tout les accents d'une chaine de

caractčre. Ex: tęte -> tete, éclipse-> eclipse,....

Je sais qu'il existe la fonction replace, mais elle ne

permet de changer qu'un type de lettre ā la fois et

Jean

unread,
Mar 30, 2004, 4:51:27 AM3/30/04
to
Bonjour,

Oups ... désolé, mauvaise version du code, voici le bon :

'---8<---Retirer_Accents_Chaine.VBS---Jean-JMST---
'http://automation.eu.tf/retirer_accents_chaine.vbs

MsgBox Retirer_Accents_Chaine(InputBox(""))

Function Retirer_Accents_Chaine(chaine)
chaine=Retirer_Accents(chaine,"a","ā|á|â|ã|ä|å")
chaine=Retirer_Accents(chaine,"e","č|é|ę|ë")
chaine=Retirer_Accents(chaine,"i","ė|í|î|ï")
chaine=Retirer_Accents(chaine,"o","ō|ó|ô|õ|ø")
chaine=Retirer_Accents(chaine,"u","ų|ú|û|ü")
chaine=Retirer_Accents(chaine,"y","ý|ĸ")

chaine=Retirer_Accents(chaine,"c","į")
chaine=Retirer_Accents(chaine,"ae","æ")
chaine=Retirer_Accents(chaine,"n","ņ")
chaine=Retirer_Accents(chaine,"ss","ß")
Retirer_Accents_Chaine=Retirer_Accents(chaine,"oe","o")
End Function

Function Retirer_Accents(texte,caractere,liste)
With New RegExp
.IgnoreCase=False
.Global=True
.MultiLine=True
.Pattern=LCase(liste)
texte=.Replace(texte,LCase(caractere))
.Pattern=UCase(.Pattern)
Retirer_Accents=.Replace(texte,UCase(caractere))
End With
End Function
'---8<---Retirer_Accents_Chaine.VBS---Jean-JMST---

Amicalement,

Jean - JMST
Belgium

"Jean" <http://cour...@jmst.be.tf> a écrit dans le message de news:uPwfmnjF...@tk2msftngp13.phx.gbl...

Nico

unread,
Mar 30, 2004, 7:08:38 AM3/30/04
to
Merci à vous pour vos réponse et de m'avoir répondu aussi
rapidement.
0 new messages