Question

J'ai quelques c # code qui utilise le Microsoft Script de contrôle pour évaluer certaines expressions:

using MSScriptControl; // references msscript.ocx

ScriptControlClass sc = new ScriptControlClass();
sc.Language = "VBScript";
sc.AllowUI = true;

try
{
    Console.WriteLine(sc.Eval(txtEx.Text).ToString());
}
    catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

(txtEx est un champ de texte simple)

expressions numériques: "6 + 4", "cos (34)", "abs (-99)", "ronde (1,234, 2)", etc., sont bien

expressions booléennes: "vrai ou faux", "1 = 2" sont bien

Mais comment puis-je évaluer un simple « si »? J'ai essayé "si (true, 2, 3)", "ssi (true, 2, 3)", "si (true) puis 2 autres 3" et "si (true) puis 2 autres 3 endif"

Quelqu'un peut-il me s'il vous plaît aider à évaluer les expressions conditionnelles simples? Toute aide appréciée!

RH

Était-ce utile?

La solution

Essayez d'envelopper votre IF-expression dans une fonction

Function test
   if (true) then
      return true
   else
      return false
   end if
End function

Ajoutez la fonction à la commande, puis utiliser l'option Exécuter

Result = ScriptControl.Run("Test")

(le code ci-dessus n'est pas testé, mais quelque chose le long de cette façon devrait fonctionner)

Consultez ce lien pour certains plus d'informations

http://support.microsoft.com/kb/184740

Autres conseils

Vous devriez envisager d'utiliser le moteur d'évaluation d'expression qui fait partie de Windows Workflow Foundation. Tant l'évaluateur et le concepteur pour il peut être utilisé séparément de WF.

if (true) then return 2 else return 3
using MSScriptControl; // references msscript.ocx

ScriptControlClass sc = new ScriptControlClass();
sc.Language = "VBScript";
sc.AllowUI = true;

// VBScript engine doesn’t have IIf function
// Adding wraper IIF function to script control.
// This IIF function will work just as VB6 IIf function.
sc.AddCode(@"Function IIF(Expression,TruePart,FalsePart)
                If Expression Then
                    IIF=TruePart
                Else
                    IIF=FalsePart
                End IF
            End Function");
try
{
    //define x,y variable with value
    sc.AddCode(@"x=5
                y=6");
    //test our IIF 
    Console.WriteLine(sc.Eval("IIF(x>y,x,y)").ToString());
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

Merci pour les conseils! Après un peu plus expérimentant, basé sur l'aide de Brummo, cela semble fonctionner:

txtEx contient ce texte:

function test
  if (1=1) then 
    test = true
  else 
    test = false
  end if
end function

puis

sc.AddCode (txtEx.Text);

et

object[] myParams = { };
Console.WriteLine(sc.Run("Test", ref myParams).ToString());

Ce n'est pas idéal, car je voulais vraiment évaluer une expression, sans bâtiment, le chargement et l'évaluation d'une fonction. (Je suis surpris IIF ne fonctionne pas pour une ligne simple, si l'évaluation).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top