Een string uitvoerten

Status
Niet open voor verdere reacties.

RonaldGJ

Gebruiker
Lid geworden
28 apr 2007
Berichten
419
Beste mensen,

Ik ben op zoek naar een functie waarmee je een string kunt uitvoeren. Voorbeeldje:

Code:
    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
        Dim strSom As String
        strSom = "5 * 7"
        Label1.Text = [COLOR="Red"]Excecute([/COLOR]strSom[COLOR="Red"])[/COLOR]
    End Sub

En dan voor de functie 'Execute()' een bestaande. Op mijn GR TI-84 zit een functie exec() waarmee dit kan. Het lijkt mij toch dat het dan met zo'n programma ook moet kunnen.

Ik hoor het graag.

Gr. Ronald!:)
 
Ik vond deze code ergens misschien heb je er iets aan, hij is geschreven in C#, maar dat moet makkelijk te verhelpen zijn, misschien kan je zelfs hem in een C#-vb.net converter stoppen.

Ik heb hem niet zelf geschreven

Code:
class Program 
{ 
public delegate double MyDelegate(double a, double b);

static void Main (string[] args) 
{ 
string math = "2 - 3"; 
Console.WriteLine (Parse(math)); 

math = "12432 * 234234"; 
Console.WriteLine (Parse(math)); 

math = "1345 / 123542"; 
Console.WriteLine (Parse(math)); 
Console.Read (); 
} 

static double Parse (string math) 
{ 
string pattern = @"^\s*(?<a>\d+)\s*(?<operator>(\+|\-|\*|\/))\s*(?<b>\d+)\s*$";
if (Regex.IsMatch(math, pattern, RegexOptions.IgnorePatternWhitespace))
{ 
Match match = Regex.Match (math, pattern, RegexOptions.IgnorePatternWhitespace); 
MyDelegate del = GetDelegate(match.Groups["operator"].Value);
return del(double.Parse(match.Groups["a"].Value), double.Parse(match.Groups["b"].Value)); 
} 
else 
throw new Exception ("parameter does not seem valid"); 
} 
static MyDelegate GetDelegate (string op) 
{ 
switch (op) 
{ 
case "+": 
return new MyDelegate (Add); 
case "-": 
return new MyDelegate (Subtract); 
case "*": 
return new MyDelegate (Multiply); 
case "/": 
return new MyDelegate (Divide); 
default: 
throw new Exception ("Invalid operator"); 
} 
} 

static double Add (double a, double b) 
{ 
return a + b; 
} 
static double Subtract (double a, double b) 
{ 
return a - b; 
}
static double Multiply (double a, double b) 
{ 
return a * b; 
} 
static double Divide (double a, double b) 
{ 
if (b! = 0) 
return (a/b); 
throw new DivideByZeroException (); 
} 
}
 
Stomme vraag misschien, maar waarom zou je het op deze manier willen??
 
De code die is gegeven vind ik zelf niet makkelijk plus dat het in C# is geschreven. Ik heb ondertussen alles maar lang uitgeschreven. Ik dacht dat er in VB 6.0 zelfs zo'n functie zat.

Ik hoop dat er nog iemand komt met een oplossing, want het zou zeer handig zijn!

Ik heb namelijk een button met 2 tekstboxen ernaast. Als je op de button klikt switcht ie tussen -, +, * en /. In de tekstboxen zet je 2 getallen en dan heb je dus een som.

Ik heb nu alles uitgeschreven met if-statements. Makkelijker zou zijn om dus de tekstbox1 in een string + de tekst van de button + tekstbox2 en dan die string uit te voeren.

Ik hoop nog op reacties.

Gr. Ronald!:)
 
Ga uit van VB.net ipv vb6, maar het lijkt mij het makkelijkt als je gewoon op de manier doet:

Code:
 Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click

Dim Getal1 as Integer = cInt(txtGetal1.Text)
Dim Getal2 as Integer = cInt(txtGetal2.Text)
Dim Uitkosmt as Integer = Getal1 * Getal2
lblUitkomst.Text = Uitkomst.ToString
    End Sub

Alleen is het voor een gebruiker mogelijk dat deze tekst invoert ipv een getal, dus je zal textboxen moeten valideren of er wel een getal in staat.

Als je op de button klikt switcht ie tussen -, +, * en /

Alleen deze heb ik niet meegenomen in de bovenstaande functie...
 
Hallo Mark,

Dat is net waar het om gaat. Nu heb ik de code uit moeten schrijven als:

Code:
If Button1.Text = "-" Then
     Val(txt1.Text) * Val(txt2.Text)
ElseIf Button1.Text = "+"........

Enz.

Het is makkelijker als je doet:

Code:
Dim Som As String

Som = Val(txt1.Text) & " " & Button1.Text & " " & Val(txt2.Text)

Label1.Text = Excec(Som)

Zoiets dergelijks. Maar dit is blijkbaar nog wel iets moeilijks ;).
Ik hoop dat er nog een oplossing komt!

Gr. Ronald!:)
 
Is niet zo moeilijk, maar je moet wel gebruik maken van het scripting object. Dit kun je als referentie toevoegen, maar ik heb 'm hier even als object ingevoegd:

Code:
        Dim script As Object
        script = CreateObject("MSScriptControl.ScriptControl")
        script.Language = "VBScript"
        Dim strProduct As String = "5*7"
        Dim res As Double = script.Eval(strProduct)
        MsgBox(res)

Je kunt hier ook javascript mee uitvoeren, dan moet je de Language property even aanpassen. Als je de Scriptcontrol toevoegt als referentie dan kun je ook Intellisense gebruiken, da's wat makkelijker.
PS. Een som is het resultaat van een optelling, een product het resultaat van een vermenigvuldiging...
 
Hallo ReneDirks,

Bedankt voor je reactie. Dit is precies wat ik zocht. Hartstikke bedankt!

Gr. Ronald!:)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan