PDA

View Full Version : محاسبه محتویات یک رشته قابل محاسبه



edisoon
سه شنبه 16 مهر 1387, 23:56 عصر
سلام دوستان
من قصد دارم محتویات یک رشته رو که بصورت فرمول قابل محاسبه ذخیره شده است رو محاسبه کنم به نظر شما آسانتر و بهترین روش آن چیست؟
مثلا حاصل رشته تعریف شده در کد زیر را چگونه میتوان به دست آورد؟

Dim Formula As String = "(1200*25)/(3*12)-200"

mostafaaa
چهارشنبه 17 مهر 1387, 09:22 صبح
در مورد CodeDom جستجو کن.
اگه چیزی پیدا نکردی بگو تا کمکت کنم.

mostafaaa
چهارشنبه 17 مهر 1387, 09:23 صبح
البته با structure ها هم میتونی انجام بدی. ولی با همون CodeDom فکر کنم راحت تره.

zarrin_306
چهارشنبه 17 مهر 1387, 10:18 صبح
من قصد دارم محتویات یک رشته رو که بصورت فرمول قابل محاسبه ذخیره شده است رو محاسبه کنم

میشه در این مورد واضحتر بگید.

edisoon
چهارشنبه 17 مهر 1387, 10:41 صبح
آقا مصطفی عزیز یه کمی در مورد CodeDom تحقیق کردم ولی زیاد سر درنیاوردم اگه یه کمی بیشتر راهنمایی کنی یا نمونه ای سراغ داری معرفی کنی ممنونت میشم چون واقعا کارم گیره توی این مورد

جناب زرین، سئوالم واضح بود ولی بیشتر توضیح میدم که من یک String دارم که توی اون یه مقداری عدد در هم ضرب و تقسیم و جمع و منها میشه، مثلا طبق نمونه ای که بالا گذاشتم. فقط نکته مهمش اینه که در اون از پرانتز استفاده شده که یه مقداری پیچیده اش میکنه، میخوام نتیجه محاسبه اون اعداد رو که تقریبا به صورت یک فرمول میباشد را به دست بیارم.

mostafaaa
چهارشنبه 17 مهر 1387, 11:11 صبح
اول فضا نامهای زیر رو به پروژت اضافه کن

Imports System.CodeDom
Imports System.Reflection
Imports System.CodeDom.Compiler

بعد با این متد که یه فرمول رشته ای رو میگیره و حاصلش رو برمیگردونه میتونی مشکلت رو برطر ف کنی.

Private Function ProcessCommand(ByVal command As String) As Double
Dim MyProvider As New VBCodeProvider 'Create a new VB Code Compiler
Dim cp As New CompilerParameters 'Create a new Compiler parameter object.
cp.GenerateExecutable = False 'Don't create an object on disk
cp.GenerateInMemory = True 'But do create one in memory.
'If cp.OutputAssembly is used with a VBCodeProvider, it seems to want to read before it is executed.
'See C# CodeBank example for explanation of why it was used.

'the below is an empty VB.NET Project with a function that simply returns the value of our command parameter.
Dim TempModuleSource As String = "Imports System" & Environment.NewLine & _
"Namespace ns " & Environment.NewLine & _
"Public Class class1" & Environment.NewLine & _
"Public Shared Function Evaluate()" & Environment.NewLine & _
"Return " & command & Environment.NewLine & _
"End Function" & Environment.NewLine & _
"End Class" & Environment.NewLine & _
"End Namespace"
'Create a compiler output results object and compile the source code.
Dim cr As CompilerResults = MyProvider.CompileAssemblyFromSource(cp, TempModuleSource)
If cr.Errors.Count > 0 Then
'If the expression passed is invalid or "", the compiler will generate errors.
Throw New ArgumentOutOfRangeException("Invalid Expression - please use something VB could evaluate")
Else
'Find our Evaluate method.
Dim methInfo As MethodInfo = cr.CompiledAssembly.GetType("ns.class1").GetMethod("Evaluate")
'Invoke it on nothing, so that we can get the return value
Return Convert.ToDouble(methInfo.Invoke(Nothing, Nothing))
End If
End Function

edisoon
چهارشنبه 17 مهر 1387, 11:39 صبح
ترکوندی واقعا مصطفی خان
بسیار زیبا، بسیار عالی، بسیار دلربا، بسیار حرفه ای
هرچند از این فانکشن چیزی نفهمیدم ولی این Function حرف نداره و کارش رو به نحو احسن انجام میده و مشکل من رو حل میکنه
(ضرب، تقسیم، جمع، منها و توان رو تونستم باهاش محاسبه کنم ولی % رو نتونستم)
اگه بخوام بفهمم که این تابع چه اعمالی رو میتونه محاسبه کنه چطوری میشه فهمید؟

saadatfar
جمعه 24 آبان 1387, 19:34 عصر
دوست من این تابع هر عملی که توسط VB قابل محاسبه باشد را محاسبه میکند حتی توان را.
در حقیقت این کد عبارت شما را به صورت دستورات صحیح در آورده و سپس آن را کامپایل می کند و در آخر نتیجه ی آن را بر می گرداند.

رضا عربلو
شنبه 25 آبان 1387, 21:47 عصر
برای فرمول نویسی هم چیزی سراغ دارید.
مثلاً
f(x)=x+2
x=2

mostafaaa
شنبه 25 آبان 1387, 22:22 عصر
سلام با این Fanction متدهای کلاس Math رو هم میتونید فراخوانی کنید و حلش کنید. ولی در مورد فرمول نویسی شک دارم.

ProcessCommand(" Math.Cos(30)")

saed2006
دوشنبه 02 آذر 1388, 20:34 عصر
من دقیقا همینو کپی کردم اما خطا زیر رو میده
Specified argument was out of the range of valid values. Parameter name: Invalid Expression - please use something VB could evaluate

ACorvinus
دوشنبه 02 آذر 1388, 23:44 عصر
سلام دوست دیرینه من "مصطفی" جان .

سزاوار تشکر کردن رو داری .

اگه لطف کنی منبع رو ذکر کنی، ممنون میشم .