Trouver des cartactères dans une string

Résolu
drnicholas001 Messages postés 37 Date d'inscription vendredi 10 septembre 2004 Statut Membre Dernière intervention 21 avril 2007 - 23 sept. 2005 à 20:55
drnicholas001 Messages postés 37 Date d'inscription vendredi 10 septembre 2004 Statut Membre Dernière intervention 21 avril 2007 - 25 sept. 2005 à 07:25
Salut, j'ai des expression du genre 5*V+8^2 et j'aimerais que mon programme sois capable de reconnaitre que V est ma variable. Je pensais faire une sorte de boucle qui vérifie caractère par caractère, et quand ya a un qui est pas un nombre ou un symbole (+-*,) lui dire que cest sa ma variable. Mais je ne sais pas vraiment comment faire :s

Merci de votre aide

13 réponses

Radiohead4ever Messages postés 71 Date d'inscription samedi 7 février 2004 Statut Membre Dernière intervention 21 novembre 2006
24 sept. 2005 à 00:40
Private Sub Main()
Dim strLeTexte As String
Dim Character As String
Dim Vvaleur As Integer
Dim i As Integer


strLeTexte = "5*V+8^2"
Vvaleur = 6


For i = 1 To Len(strLeTexte)
Character = Mid(strLeTexte, i, 1)

'Si le charactère n'est pas numérique...
If IsNumeric(Character) = False Then

Select Case Character
'Liste des exceptions...
Case "+"
Case "-"
Case "/"
Case "*"
Case "^"

'Liste des variables...
Case "V"
'Si on se rend ici, c'est que le charactère
'est, dans ton cas, la variable V.
'Pour remplacer ce caractère par la valeur
'de la variable qu'il représente :
'Note : Toutes les apparitions de se charactère
'dans le string seront remplacées.
strLeTexte = Replace(strLeTexte, Character, Vvaleur)

Case Else
'Si on se rend ici, c'est que le charactère
'n'est pas reconnu comme une exception, ni
'une variable.
MsgBox "Le caractère " & Character & " n'est pas reconnu."
End Select

End If
Next i
MsgBox strLeTexte 'et voici le résultat
End Sub

'///////////////////////////////////////////////

Si ce code répond à ta question, appuis sur le boutton "Accpeter cette réponse". Ainsi, tous pourrons en profiter. Si tu as des questions, post-les, je tâcherai d'y répondre.

RadioHead4Ever
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
23 sept. 2005 à 21:41
sous réserve, mais à mon avis, ce n'est pas possible.
ton expression va être prise en un bloc, comme une string.
ta variable contenue dans ta string ne sera prise que comme partie de string, et plus variable.
faisable en PHP, mais à mon avis, pas en VB

PCPT
0
drnicholas001 Messages postés 37 Date d'inscription vendredi 10 septembre 2004 Statut Membre Dernière intervention 21 avril 2007
23 sept. 2005 à 22:58
Ya des fonctions en VB qui permette de modifier les string, cest juste que je l'ai connais pas :S sinon avez vous d'autre idée qui revienne au même résultat?
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
23 sept. 2005 à 23:17
ba oui, dans le principe, enlever et/ou repérer un caractère, c'est possible. mais pas l'interpréter en variable pour autant (à ma connaissance).
des codes traitant du sujet, çà ne manque pas.
les fonctions essentielles sont :

Instr(débutchaine, chaine, chaineàtrouver) <- retourne la position de la chaîne à trouver
mid
left
right
len

etc.....

soit plus précis, quitte à expliquer un peu le but de ta source

si tu veux mettre un txtbox contenant "5"
un 2e avec "2+7-9^6+x*16.5"

et que le but est de remplacer x par le contenu de ta txtbox1 (donc 5), c'est faisable aussi, mais tu mélanges un peu tout alors...
bref, je ne vais pas m'étendre sur le sujet si je suis à côté
PCPT
0

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

Posez votre question
P__ROMEO Messages postés 294 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 9 mars 2006 1
23 sept. 2005 à 23:20
Tu veux quel résultat à la fin?
5*V+8^2 = 5V + 64 (1)

ou bien, si V = 1
5*V+8^2 = 69 (2)
0
P__ROMEO Messages postés 294 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 9 mars 2006 1
23 sept. 2005 à 23:25
je n'avais pas vu ton message pcpt. (pas actualisé la page avant d'écrire)
mais bon, ca reste un résumé au 3/4
0
drnicholas001 Messages postés 37 Date d'inscription vendredi 10 septembre 2004 Statut Membre Dernière intervention 21 avril 2007
24 sept. 2005 à 00:03
Non je pense que je me suis mal exprimé. le résultat que je devrais avoir c'est :
5*V+8^2 donne V
6+7*Al^2 donne Al

Je disais que V était un variable mais je parlais mathématiquement. En faire j'ai déja faite mon programme qui peut déterminer la valeur de X dans un calcul mais lutilisateur est obligé d'utiliser X. J'aimerais que s'il utilise V au lieu de X ben le programme va savoir que V c'est la "variable" à derterminer et il va cherche pour V et pas X.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 sept. 2005 à 00:13
machaine = "5*V+8^2"
tavariable s'appelle mVar (de type Long)
mVar = 65

resultat = Val(replace(machaine, "V", mVar))

PCPT
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 sept. 2005 à 00:14
woups, pas Val, il y a encore ton calcul à faire
sResultat = replace(machaine, "V", mVar)
0
cs_hassen Messages postés 338 Date d'inscription mardi 28 janvier 2003 Statut Membre Dernière intervention 4 novembre 2008
24 sept. 2005 à 14:57
t'a qu'a utiliser le l'ocx de microsoft : 'Microsoft Script Control 1.0'
tu doit le referencier : menu projet/Réference et tu coche 'Microsoft Script Control 1.0'
f(V)=5*V+8^2

Public Function EvaluerExpression(V As Double) As Double


Dim x As New ScriptControl


Dim Expression As String
Expression = Replace("5*V+8^2", "V", Replace(V, ",", "."))


x.Language = "VBScript"
EvaluerExpression = x.Eval(Expression)


End Function

Hassen TUNISIE
0
drnicholas001 Messages postés 37 Date d'inscription vendredi 10 septembre 2004 Statut Membre Dernière intervention 21 avril 2007
24 sept. 2005 à 21:18
Salut Radiohead4ever, ta source est presque exactement ce que je cherchais. en faite j'ai fait quelques modifications :

Private Sub Main()
Dim strLeTexte As String
Dim Character As String
Dim Vvaleur As Integer
Dim i As Integer


strLeTexte = "5*V+8^2"
Vvaleur = 6


For i = 1 To Len(strLeTexte)
Character = Mid(strLeTexte, i, 1)

'Si le charactère n'est pas numérique...
If IsNumeric(Character) = False Then

Select Case Character
'Liste des exceptions...
Case "+"
Case "-"
Case "/"
Case "*"
Case "^"

'se qui reste ce son des lettres, donc notre variable.
Case Else
charactere = charactere & Mid(strLeTexte, i, 1)
End Select

End If
Next i
MsgBox strLeTexte 'et voici le résultat
End Sub

Ainsi, si on a 5*V+8^2 sa retourne V, si on a 5*P+8^2^, sa restourne P, si on a 5*lol+8^2 sa retourne lol.

Et un ami ma fait penser à quelques choses, on pourrait aussi simplement prendre l'equation et faire plus replace et ainsi effacer tout les chiffres de 0 à 9, les +-*/(), log, sin, cos, tan et etc...
Merci
0
Radiohead4ever Messages postés 71 Date d'inscription samedi 7 février 2004 Statut Membre Dernière intervention 21 novembre 2006
25 sept. 2005 à 02:41
Oui si tu veux.. mais je ne croyais pas que c'était ton objectif.. Je croyais que tu voulais simplement remplacer les variables de ton expression par leur valeur numérique. Mais bon, je crois que tu réussira à te débrouille pour fignoler le code à ta façon. Sur ce, bonne prog et si tu rencontre un problème, re-post le.

RadioHead4Ever
0
drnicholas001 Messages postés 37 Date d'inscription vendredi 10 septembre 2004 Statut Membre Dernière intervention 21 avril 2007
25 sept. 2005 à 07:25
Merci beaucoup , la communauté de VB France est vraiment cool!
Je suis en train de travailler sur un énorme prog pour l'apprentissage des mathématiques que je vais bientôt poster sur VB France.
0
Rejoignez-nous