Enklaste sättet: http://www.devx.com/vb2themax/Tip/18773 Jag googlade lite, kanske detta kan va nåt? Får fel ... Detta kanske funkar, och verkar kunna parsa rätt hyggligt: http://www.codeproject.com/KB/dotnet/evaluator.aspx. Ser ingen större anledning att gå utanför det som ligger i .NET eller VBScript. Ska du bara ha enklare formler funkar det. Ska du börja blanda in variabler etc. så blir det krångligare. "Att skriva en egen parser är inte så simpelt som det kanske verkar. " Så jättegrymma formler kommer jag inte att ha behov för. Matte funktion efterlyses
Om jag har en sträng i form av en formel.
<code>
dim myFormel as string = "( 23 + 2 ) / 23"
dim mittsvar as double = calculator( myFormel )
</code>
Finns det något färdig funktion som kan returner svaret?Sv: Matte funktion efterlyses
Annars måste du nog antingen skriva en egen parser (och det kan vara meckigt även för enklare formler) och sen interpretera, alt. borde det gå med Reflection.Emit, men jag gissar att du ändå måste skriva en parser.Sv: Matte funktion efterlyses
En del kostar pengar och andra klarar inte paranteser, men nån bra gratis class borde du hitta.
http://www.google.se/search?hl=sv&q=parse+string+formula&meta=
Lycka till!
edit: annars om det bara rör sig om så enkla formler, så kan du väl som niklas va inne på,
skriva din egen parser. Detta borde vara ganska enkelt om jag inte glömt nåt problem.
Man får parsa fomelns komponenter efter rådande matematisk prioritetsordning.
Paranteser först, sen (* och /) för att sen summera. no?Sv:Matte funktion efterlyses
<code>
Dim sc As New MSScriptControl.ScriptControl
</code>
Type 'MSScriptControl.ScriptControl' is not defined.Sv:Matte funktion efterlyses
Att skriva en egen parser är inte så simpelt som det kanske verkar. Sv: Matte funktion efterlyses
Vad skulle begränsningen med nedan kod vara?
Har provat lite formler och det verkar fungera.
<code>
Dim sc As New MSScriptControl.ScriptControl()
' You always need to initialize a language engine
sc.Language = "VBScript"
' this is the expression - in a real program it will probably be
' read from a textbox control
Dim expr As String = "12 + 3 * 10"
Dim res As Double = sc.Eval(expr)
' display the result
Console.WriteLine("{0} = {1}", expr, res)
</code>Sv:Matte funktion efterlyses
Sv: Matte funktion efterlyses
Nej, inte om formlerna är långa och har flera nästlade paranteser. Då blir
det lite jobbigt att analysera....Sv:Matte funktion efterlyses
Det verkar fungera fint. Tackar alla som hjälpt till med att lösa min tråd.