Май 8, 2013 - Уроки Visual Basic.NET 4 комментария
Математические выражения. Метод Eval из VBS
Метод Eval принимает строку как выражение, высчитывает его и выводит результат. Похожий вариант представлен средствами .NET, смотреть статью.
Dim objScript As Object = CreateObject("MSScriptControl.ScriptControl") objScript.Language = "VBScript" Label1.Text = "Ответ: " & objScript.Eval(TextBox1.Text)
Можно возводить квадрат, вычислять синус, косинус и т.д
Похожие записи:
Метки: eval, vbs, выражение, Метод Eval из VBS, пример
Евгений
Просмотров: 6 518
Запись опубликована в 07:17
Емаё, а как я мучился, пытаясь реализовать это фиг знает как...
Такая же ситуация была)
В .Net это можно так сделать:
Public Function Решить(ByVal выражение As String) As String
Dim myCode As CodeDomProvider = CodeDomProvider.CreateProvider("VB")
Dim myPar As New CompilerParameters()
'формируем виртуальный класс, в котором будет производиться расчет
Dim myCodeBody As New System.Text.StringBuilder()
myCodeBody.AppendLine("Public Class MyCalculator")
myCodeBody.AppendLine("Public Function Calc() As Double")
'TextBox1.Text.ToLower().Replace("x", TextBox2.Text) - меняем икс в формуле (TextBox1) на число указанное в TextBox2
'.Replace(",", ".") - меняем запятые на точки, т.к. в VB в качестве десятичного разделителя используются точки
myCodeBody.AppendLine(String.Format("Return {0}", выражение))
myCodeBody.AppendLine("End Function")
myCodeBody.AppendLine("End Class")
'компилируем
Dim myResult As CompilerResults = myCode.CompileAssemblyFromSource(myPar, myCodeBody.ToString())
If myResult.Errors.HasErrors Then
'какие-то ошибки
For i As Integer = 0 To myResult.Errors.Count - 1
If myResult.Errors(i).ErrorText = "Ожидалось выражение." Then
MsgBox(myResult.Errors(i).ErrorText, MsgBoxStyle.Critical, "Ошибка")
End If
Next
Return "Ошибка!"
End If
'ошибок нет, выдергиваем наш класс
Dim myAsm As Assembly = myResult.CompiledAssembly()
Dim myCls As Object = myAsm.CreateInstance("MyCalculator", True)
'выводим результат
Return myCls.Calc().ToString
End Function
Вычисление происходит дольше, но все равно плюс, что такое можно сделать.
Запостю.