Modifier le contenu d'une chaine de caractères

Résolu
Signaler
Messages postés
61
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
9 septembre 2009
-
Messages postés
180
Date d'inscription
jeudi 21 août 2003
Statut
Membre
Dernière intervention
26 novembre 2007
-
voila j'ai une chaine de caractères genre : "{1234}{5678}-abcdefghijkf"



et je veux que les deux nombres entre accolades {} soient augmenter d'un nombre x.



merci d'avance

5 réponses

Messages postés
809
Date d'inscription
mercredi 11 octobre 2000
Statut
Membre
Dernière intervention
29 septembre 2010
9
Oups petit bug c'est glissé!









Private Function decouper(str As String, ByRef debut As Integer, _


ByRef fin As Integer) As String

Dim s As String

debut = InStr(debut, str, "{")

fin = InStr(debut, str, "}")

s = Mid(str, debut + 1, fin - debut - 1)

debut = fin



decouper = s

End Function

Private Sub Command1_Click()

Dim str As String



str = "{1234}{5678}-abcdefghijkf"

Debug.Print str



Dim posDeb As Integer, posFin As Integer

posDeb = 1

posFin = 1



' Premiere partie

Dim val1 As String

val1 = decouper(str, posDeb, posFin)

val1 = CInt(val1) + 2



' Seconde partie

Dim val2 As String

val2 = decouper(str, posDeb, posFin)

val2 = CInt(val2) + 2



' Fin de chaine

Dim fin As String

fin = Mid(str, posFin + 1 )



' Former la chaine finale

str = "{" & val1 & "}{" & val2 & "}" & fin





Debug.Print str



End Sub
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Salut
Pour ça, il faut apprendre à utiliser les fonctions suivantes :
# Instr : Te renverra l'emplacement où commence la chaine recherchée :
Instr("{1234}{5678}-abcdefghijkf", "{") renverra 1 puisque { est en 1ere position
Instr(2, "{1234}{5678}-abcdefghijkf", "{") renverra 7 puisque { est trouvé en 7eme position à compter du caractère n° 2
# Mid renvoie une portion de la chaine :
Mid("{1234}{5678}-abcdefghijkf", 2, 4) renverra "1234" (commence au 2eme et prend 4 caratères)
# CLng convertira une chaine en chiffre entier
CLng("1234") renverra 1234 (utilise pour faire des additions)
# CStr convertira un chiffre en chaine
CStr(1234) renverra "1234"
# le symbole & te permettra de concaténer (mettre bout à bout) deux chaines
"1234" & "8888" renverra "12348888"
...
Bien sûr, tu peux utiliser toutes les combinaisons possibles de ces fonctions
A toi d'isoler les zones qui t'interessent, les manipuler et les remettre dans l'ordre

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
(je
Messages postés
809
Date d'inscription
mercredi 11 octobre 2000
Statut
Membre
Dernière intervention
29 septembre 2010
9
Salut



Je te proposes un premiere solution... qui se base sur les { et }
permettant aisni de modifier la longueur des chaines numérique qu'elles
contiennent. Par contre si les chaine numerique sont de longueur fixe,
tu peux simplifier ..



Private Function decouper(str As String, ByRef debut As Integer, _


ByRef fin As Integer) As String

Dim s As String

debut = InStr(debut, str, "{")

fin = InStr(debut, str, "}")

s = Mid(str, debut + 1, fin - debut - 1)

debut = fin



decouper = s

End Function



Private Sub Command1_Click()

Dim str As String



str = "{1234}{5678}-abcdefghijkf"

Debug.Print str



Dim posDeb As Integer, posFin As Integer

posDeb = 1

posFin = 1



' Premiere partie

Dim val1 As String

val1 = decouper(str, posDeb, posFin)

val1 = CInt(val1) + 2



' Seconde partie

Dim val2 As String

val2 = decouper(str, posDeb, posFin)

val2 = CInt(val2) + 2



' Fin de chaine

Dim fin As String

fin = Mid(str, posFin)



' Former la chaine finale

str = "{" & val1 & "}{" & val2 & "}" & fin





Debug.Print str



End Sub
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
18
Salut,

Un peu tard peut-être, mais j'avais envie de m'amuser.
OK avec les instr sauf que ça ne renvoie que la 1ere occurence. J'ai codé une méthode très bourrin mais qui a l'air de marcher, quelque soit le nombre de paire de {], le tout sans commentaires ou presque :

Private Sub Form_Load()
Dim s As String 'la chaine d'origine
Dim sc As String 'les sous chaine
Dim sr As String 'la chaine résultat
Dim p As Integer 'position du {
Dim i As Integer 'compteur de position dans la chaine
Dim c As String 'le car analysé
Dim inc As Long 'incrément


inc = 100


s = "{1234}{5678}-abcdefghijkf"

For i = 1 To Len(s)

c = Mid(s, i, 1)

Select Case c
Case "{"
sr = sr & c
p = i + 1
Case "}"
sr = sr & CStr(CLng(sc) + inc) & c
sc = ""
p = 0
Case Else
If p > 0 Then
sc = sc & c
Else
sr = sr & c
End If
End Select

Next

MsgBox sr

End Sub

Comme ça, mierkool tu as le choix.

Bonne prog

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
Messages postés
180
Date d'inscription
jeudi 21 août 2003
Statut
Membre
Dernière intervention
26 novembre 2007
2
Salut
Voici une méthode pour procéder :

Dim strdeb As String, strfin As String
Dim pos1 As Integer, pos2 As Integer
Dim MonNombre As Integer
strdeb = "coucou{1234}med{5678}-abcdefghijkf"
strfin = ""
pos1 = InStr(strdeb, "{")
pos2 = 1
While (pos1 > 0)
strfin = strfin & Mid(strdeb, pos2, pos1 - pos2)
pos2 = InStr(pos1, strdeb, "}")

MonNombre = Val(Mid(strdeb, pos1 + 1, pos2 - pos1 - 1))
MonNombre = MonNombre + 4 ' en incremente par monnobre de 4
strfin = strfin & "{" & MonNombre & "}" pos1 InStr(pos1 + 1, strdeb, "{"): pos2 pos2 + 1
Wend
strfin = strfin & Mid(strdeb, pos2)

Dans notre cas, strfin contient "{1238}{5682}-abcdefghijkf"


Bonne programmation.


Cordialement medelidrissi
<HR>
En Informatique, rien n'est impossible. mais, ce n'est pas toujours évident.