Pb de concaténation de chaînes

[Résolu]
Signaler
Messages postés
71
Date d'inscription
jeudi 9 décembre 2004
Statut
Membre
Dernière intervention
7 décembre 2007
-
Messages postés
71
Date d'inscription
jeudi 9 décembre 2004
Statut
Membre
Dernière intervention
7 décembre 2007
-
Salut,
J'espère qu'il y a quelqu'un qui pourra m'aider dans mon petit problème.
En effet, j'ai une chaîne de caractère comme entrée dans ma fonction et sur cette chaîne je veux faire des modifications sur quelques mots qui la composent.


Prenons par exemple la chaîne suivante :
select var1,var10 from LaTable where var23 = 10;


Je veux que chaque mot qui contient "var" sera concaténé par "TT" donc comme résultat final j'aurai :
select var1TT,var10TT from LaTable where var23TT = 10;


J'ai essayé avec le replace mais le problème est le chiffre présent après "var".


Donc, si quelqu'un a une idée comment résoudre cela.
Merci.

8 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
code modifié un ptit peu, çà donne çà :

Option Explicit

Private Sub Form_Load()
    Dim aArr1(30) As String, aArr2(30) As String,
sStr As String, i
As Integer

'   init
les tableaux
    For i =  0 To 30
        aArr1(i) = "var" & i & "
"
        aArr2(i) = "var" & i & "TT "
    Next i

'   chaîne
    sStr = "select var1,var10 from LaTable
where var23 = 10;"

'  
resultat
    MsgBox sStr & vbCrLf & Replace(MultiReplace(Replace(sStr, ",", "
,"), aArr1, aArr2), "
,", ",")

    Unload Me
End Sub

Function MultiReplace(ByVal Expression As String, aFind() As String, aReplace() As String) As String
    Dim i&, lPos&, UboundReplace%, sBuffer$

'   tableaux dimentionnés?
    If (Not (Not aFind)) = 0 Then MultiReplace = Expression: Exit
Function
    If (Not (Not aReplace)) = 0 Then UboundReplace = -1 Else UboundReplace = UBound(aReplace)

'   chaque élément du
tableau à chercher
    If UboundReplace = -1 Then
        For i = LBound(aFind) To UBound(aFind)
            Call MonoReplace(Expression, aFind(i),
vbNullString)
        Next i
    ElseIf UboundReplace >= UBound(aFind) Then
        For i = LBound(aFind) To UBound(aFind)
            Call MonoReplace(Expression, aFind(i),
aReplace(i))
        Next i
    Else
        For i = LBound(aFind) To UBound(aFind)
            Call MonoReplace(Expression, aFind(i),
aReplace(UBound(aReplace)))
        Next i
    End If
    MultiReplace = Expression
End Function

Sub MonoReplace(ByRef Expression As String, sFind As String, sReplace As String)
    Dim lPos&
    Do
        lPos = InStr(1, Expression, sFind)
        If lPos > 0 Then Expression = Left$(Expression, lPos - 1) & sReplace & Right$(Expression, Len(Expression) - lPos - Len(sFind) + 1)
    Loop Until lPos = 0
End Sub

<small>Coloration
syntaxique automatique [AFCK] </small>
       

quant à l'explication, la "solution" sert pourtant de traduction

fait ceci :
i =3
msgbox (i=4)

tu vois? i ne s'initialise pas à 4 pour autant.
tu fais pareil avec ton while i=instr(blabla)>0, sauf  qu'en plus tu utilises mal instr

++
PCPT  [AFCK]
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
Salut, fais une petite recherche sur www.codyx.org et le tour est joué!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
71
Date d'inscription
jeudi 9 décembre 2004
Statut
Membre
Dernière intervention
7 décembre 2007

Merci pour la réponse.
Est ce que  c'est pas possible d'utiliser le "?" ou bien "*" pour désigner la présence d'autres caractères dans la chaîne ? Ainsi, je pourrai écrire Replace(chaine,"varIciLe*","varIciLe*TT")
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
salut,
de toute façon tes "varN" étant des variables, tu ne pourras pas renommer des variables, ta requète cherchera le champ nommé "varNTT" et non son contenu.

à moins que çà soit réellement le nom de tes champs?...
dans quel cas tu peux utiliser cette fonction, avec les arguments en tableau

++
PCPT  [AFCK]
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
71
Date d'inscription
jeudi 9 décembre 2004
Statut
Membre
Dernière intervention
7 décembre 2007

Bon, je voulais essayer avec ce bout de code mais apparament il n'entre jamais dans la boucle et je ne comprends pas pourquoi.

Do While ((i = InStr(chaine, "var")) > 0)
        If (Mid$(chaine, i+3, 1) = " ") Then
            Mid$(in_SQL, i + 4, 1) = "TT"
        End If
Loop

Merci.
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
traduction :
Do While ((i = InStr(chaine, "var")) > 0)

do -> fait
while -> tant que(i InStr(chaine, "var") -> booléen, i ou <> de POSITION_NUMERIQUE_DE_DEPART***variable_chaine, dans "var", on cherche rien
>0 -> vrai

euh..... beh si, lka traduction est bonne

solution :
utiliser instr comme il se doit -> i = instr(position de départ (1 ou i), chaîne à lire, chaîne à trouver)
faire le while sur i

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
71
Date d'inscription
jeudi 9 décembre 2004
Statut
Membre
Dernière intervention
7 décembre 2007

Merci pour la réponse. Les "VarN" sont du texte normal donc pas des variables dans ce cas là.
Sinon, j'ai visité le lien proposé mais d'après la première lecture je crois qu'il ne prend pas en considération les caractères après le mot "var" donc on aura comme résultat "VarTTN" et non "VarNTT" comme souhaité.

Sinon, pour la 2ème réponse :
je veux que le "i" pointe à chaque fois sur le début de la variable var donc qu'on parcourt toute la chaîne. Sinon, j'ai pas bien compris qu'est ce que tu voulais dire par ça : do -> fait
while -> tant que(i InStr(chaine, "var") -> booléen, i ou <> de POSITION_NUMERIQUE_DE_DEPART***variable_chaine, dans "var", on cherche rien
>0 -> vrai

Merci.
Messages postés
71
Date d'inscription
jeudi 9 décembre 2004
Statut
Membre
Dernière intervention
7 décembre 2007

Un très grand merci