Extraction de caractere

mimildi Messages postés 12 Date d'inscription jeudi 13 avril 2006 Statut Membre Dernière intervention 17 août 2007 - 28 sept. 2006 à 11:46
olixelle Messages postés 506 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 3 mars 2008 - 28 sept. 2006 à 14:58
Bonjour a tous
je recherche un petit coup de main.....j'aurais voulu connaitre comment en vb remplacer  un bout de chaine de caractere par un autre:
je m'explique:
admettons que j'ai une chaine "bonjourXXXXX....et....XXXX....et....XX...." je voudrai retirer touts les "X" qui sont en nombres superieur a 4 mais garder les 4 premiers.
ouulllaaaa j'espere avoir etait assez clair...merci d'avance

10 réponses

olixelle Messages postés 506 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 3 mars 2008 2
28 sept. 2006 à 11:58
tu trouveras ta réponse dans les expressions régulières
c un peu indigeste au début mais très puissant

Rollerman
0
mimildi Messages postés 12 Date d'inscription jeudi 13 avril 2006 Statut Membre Dernière intervention 17 août 2007
28 sept. 2006 à 12:05
Merci Rollerman je vien d'aller voir les expressions reguliere est étant debutant c'est assez "hard" mais si tu me dit que la solution est la alors je vais essaye de la trouver......
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
28 sept. 2006 à 13:14
 Bonjour,

Exemple facilement transformable en vb6.
Dans ce script, j'affiche le nombre de fois que l'occurence recherchée
a été trouvée.
Il suffit donc de faire un Replace pour ne garder que les 4 premiers "XXXX".
Sur ce forum ou sur http://www.codyx.org/ , tu trouveras une variante en pur vb6.

jean-marc

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Recherche et modification d'une chaine de caractère dans une phrase
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''


'Instruction Option Explicit: Force la déclaration explicite de toutes les variables dans un script
'Option Explicit


'Instruction Const: Déclare des constantes destinées à remplacer des valeurs littérales
Const Texte = "XXXXX Colis&nbsp;=Num&eacuteXXXXXX; ro 8N00629048780&nbsp;&agrave;&nbsp;destination&nbsp;de&nbsp;=74130 </td>"
 
Const sChaine = "XXXXX"   'chaine recherchée


'Instruction Dim: Déclare des variables et alloue l'espace de stockage
Dim aPos() , iPos
'Instruction ReDim: Déclare les variables de tableau dynamique et attribue ou
'réattribue l'espace de stockage au niveau de la procédure
'Tableau où sont stockées les positions
ReDim aPos(0) 


'Fonction InStr: Renvoie la position de la première occurrence d'une chaîne
'à l'intérieur d'une autre
iPos = InStr(1, Texte, sChaine) 


'Instruction While...Wend: Exécute une série d'instructions tant qu'une condition donnée est True
    While iPos <> 0
'Fonction UBound: Renvoie le plus grand indice disponible pour la dimension indiquée d'un tableau
        ReDim Preserve aPos(UBound(aPos) + 1)
        aPos(UBound(aPos)) = iPos
        iPos = InStr(iPos + 1, Texte, sChaine)
    Wend


'Instruction If...Then...Else: Exécute un groupe d'instructions soumises à une condition,
'en fonction de la valeur d'une expression
    If UBound(aPos) > 0 Then
        Dim i , Resultat
        Resultat = "L'occurrence """ & sChaine & """ a été trouvée " & UBound(aPos) & " fois " &_
                   "dans l'expression " &vbCrLf&vbCrLf& """" & Texte & """" &vbCrLf


'Instruction For...Next: Répète un groupe d'instructions un nombre spécifié de fois
'Fonction CStr: Renvoie une expression qui a été convertie en un Variant de sous-type String
'Fonction Len: Renvoie le nombre de caractères contenus dans une chaîne
        For i = 1 To UBound(aPos)
            Resultat = Resultat & vbCrLf & "Postion: " & CStr(aPos(i)) & "," & CStr(aPos(i)) + Len(sChaine)
        Next 


    Else
   
        Resultat = "L'occurrence """ & sChaine & """ n'a pas été trouvée dans l'expression " &vbCrLf&vbCrLf&_
        """" & Texte & """" '&vbCrLf&vbCrLf&_
       
    End If


MsgBox Resultat
0
geobasic Messages postés 69 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 3 octobre 2006
28 sept. 2006 à 13:18
Salut

2 instructions: Instr et Replace. Exemple:

Dim ptr As Integer
Ptr = Instr(MaChaine,"XXXX")
If Ptr > 0 Then
    MaChaine = Replace(MaChaine, "X", "", Ptr +4)
End If

En clair l'instruction Instr nous permet de repérer l'offset des 4 premiers X, et Replace retire les X suivant à partir de offset + 4
0

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

Posez votre question
geobasic Messages postés 69 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 3 octobre 2006
28 sept. 2006 à 13:19
Salut

2 instructions: Instr et Replace. Exemple:

Dim ptr As Integer
Ptr = Instr(MaChaine,"XXXX")
If Ptr > 0 Then
    MaChaine = Replace(MaChaine, "X", "", Ptr +4)
End If

En clair l'instruction Instr nous permet de repérer l'offset des 4 premiers X, et Replace retire les X suivant à partir de offset + 4
0
olixelle Messages postés 506 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 3 mars 2008 2
28 sept. 2006 à 13:28
effectivement en faisant un boucle sur l'instruction de geobasic tu devrais t'en sortir

mé bon c pas très élégant :)
0
mimildi Messages postés 12 Date d'inscription jeudi 13 avril 2006 Statut Membre Dernière intervention 17 août 2007
28 sept. 2006 à 14:25
Merci pour ta réponse geobasic mais je pense pas quelle va fonctionner car imagine que je renconte effectivement mais "XXXX" dans mas chaine mais que juste colle derriere tu as "Z" et bien ta procedure effacera le "Z" si j'ai bien compris hors ce n'est pas cela que je recherche......je cherche a efface tout les "X" si il yen a plus de quatre a la suite.je suis sur une piste incluant un count et un compare mais pas sur de moi....alors je continu..


merci beaucoup pour votre aide
0
mimildi Messages postés 12 Date d'inscription jeudi 13 avril 2006 Statut Membre Dernière intervention 17 août 2007
28 sept. 2006 à 14:28
mille pardon geobasic ta reponse me semble correct en fait merci a tous
0
geobasic Messages postés 69 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 3 octobre 2006
28 sept. 2006 à 14:43
Excuxe moi mais il y a un petit problème dans mon code, j'aurais dû le tester avant de l'envoyer. En fait la fonction Replace à partir de Ptr+4 suprime tous les caractères du début de la chaine jusqu'à Ptr + 4. Il faut légèrement corriger le code de cette façon:

MaChaine = Left(Machaine,Ptr+3) + Replace(MaChaine, "X", "", Ptr +4)
0
olixelle Messages postés 506 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 3 mars 2008 2
28 sept. 2006 à 14:58
essayes ca:

dim machaine as string
machaine = "XXXXX454xx4564XXXXXXX123132XXX46445XXX"

do while (Instr(MaChaine,"XXXX") > 0)
   machaine = Replace(machaine , "XXXXX", "XXXX")
loop

Rollerman
0
Rejoignez-nous