Modifier le contenu d'une chaine de caractères

Résolu
mierkool Messages postés 61 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 9 septembre 2009 - 19 juil. 2005 à 20:00
medelidrissi Messages postés 180 Date d'inscription jeudi 21 août 2003 Statut Membre Dernière intervention 26 novembre 2007 - 19 juil. 2005 à 20:56
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

Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 9
19 juil. 2005 à 20:45
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
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
19 juil. 2005 à 20:20
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
0
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 9
19 juil. 2005 à 20:37
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
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 18
19 juil. 2005 à 20:49
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 !?
0

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

Posez votre question
medelidrissi Messages postés 180 Date d'inscription jeudi 21 août 2003 Statut Membre Dernière intervention 26 novembre 2007 2
19 juil. 2005 à 20:56
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.
0