by David SERROR (2 Submissions)
Category: String Manipulation
Compatability: VB 6.0
Difficulty: Unknown Difficulty
Originally Published: Fri 25th October 2002
Date Added: Mon 8th February 2021
Rating:
(1 Votes)
Stockez vos formules de calcul dans une base de donn¨es et non plus dans votre code. Cela vous permet de changer vos formules sans recompiler
API Declarations
Public fonction as string '(fonction est la formule que vous souhaitez calculer)
'ceci est une fonction récursive, elle s'appelle automatiquement jusqu'à ce que
'le calcul qui lui est demandé soit une opération simple entre deux nombres.
' Ces variables ne doivent pas être déclarées public car elles ont une valeur
' différente à chaque appèle de la fonction.
Dim nbre1 As Double
Dim nbre2 As Double
Dim position As Integer
Dim nb_parenthese As Integer
Dim caractere As String
Dim operateur As String
Dim reste As String
' position correspond à la position du caractère en cours de traitement dans la
' formule
position = 1
' caractere correspond au caractere en cours de traitement
caractere = Mid(fonction, position, 1)
' test pour savoir si fonction correspond au résultat final
Do While Not IsNumeric(fonction)
If caractere = "(" Then
' quelque soit la formule, il faut gérer la priorité des parentheses. Pour
' se faire, on compte le nombre de parentheses ouvertes, et on cherche celle
' qui ferme la première. On obtient un calcul que l'on traite, pouvant
' contenir des sous-niveaux de parentheses et ainsi de suite....
nb_parenthese = 1
Do While nb_parenthese <> 0
position = position + 1
caractere = Mid(fonction, position, 1)
Select Case caractere
Case Is = "("
nb_parenthese = nb_parenthese + 1
Case Is = ")"
nb_parenthese = nb_parenthese - 1
End Select
Loop
' avant de commencer le calcul contenu entre parentheses, il faut garder
' dans une variable le reste de la formule(après la parenthese fermante)
reste = Mid(fonction, position + 1, Len(fonction))
' on peut procéder alors au calcul du contenu entre parentheses.
fonction = Mid(fonction, 2, position - 2)
Call calc2N(fonction)
' on concatène le resultat du calcul avec la fin de la formule
fonction = fonction & reste
End If
' Quand le premier caractère n'est pas ou plus une parenthese, on peut
' extraire le premier nombre et l'opérateur.
fonction = Replace(fonction, ",", ".")
nbre1 = Val(fonction)
reste = Mid(fonction, Len(Trim(nbre1)) + 1, Len(fonction))
fonction = nbre1 & reste
operateur = Mid(fonction, Len(Trim(nbre1)) + 1, 1)
' on cherche la position de l'opérateur dans la formule.
position = InStr(1, fonction, operateur)
reste = Mid(fonction, position + 1, Len(fonction))
' si ce qui reste n'est pas un nombre, on le traite avant de continuer.
If Not IsNumeric(reste) Then
Call calc2N(reste)
End If
' le reste calculé, on fait l'opération correpondante à l'opérateur.
reste = Replace(reste, ",", ".")
nbre2 = Val(reste)
Select Case operateur
Case Is = "+"
resultat = nbre1 + nbre2
Case Is = "-"
resultat = nbre1 - nbre2
Case Is = "*"
resultat = nbre1 * nbre2
Case Is = "/"
resultat = nbre1 / nbre2
End Select
fonction = Replace(fonction, ".", ",")
fonction = resultat
Loop
End Function
No comments have been posted about Stockez vos formules de calcul dans une base de donn¨es et non plus dans votre code. Cela vous perm. Why not be the first to post a comment about Stockez vos formules de calcul dans une base de donn¨es et non plus dans votre code. Cela vous perm.