ahikaz
Messages postés71Date d'inscriptionjeudi 9 décembre 2004StatutMembreDernière intervention 7 décembre 2007
-
15 févr. 2007 à 14:49
ahikaz
Messages postés71Date d'inscriptionjeudi 9 décembre 2004StatutMembreDernière intervention 7 décembre 2007
-
15 févr. 2007 à 17:49
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.
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
ahikaz
Messages postés71Date d'inscriptionjeudi 9 décembre 2004StatutMembreDernière intervention 7 décembre 2007 15 févr. 2007 à 15:13
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")
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 15 févr. 2007 à 16:02
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 15 févr. 2007 à 16:14
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
ahikaz
Messages postés71Date d'inscriptionjeudi 9 décembre 2004StatutMembreDernière intervention 7 décembre 2007 15 févr. 2007 à 16:25
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