Vypocet vyrazu v string premennej   zodpovězená otázka

VB.NET

Zdravim.

Snazim sa v vb.net vypocitat rovnicu, kt. je v premennej typu string.

V MS Access bola funkcia eval.

Tu som nasiel toto riesenie:

Dim sc As New MSScriptControl.ScriptControl
sc.Language = "VBScript"
Dim vysledok As Double
Dim vzorec As String
vzorec = "1+1"
vysledok = sc.Eval(vzorec)

Funguje ale funkcia iif nie je podporovana.

To znamena toto skonci chybou:

Dim sc As New MSScriptControl.ScriptControl
sc.Language = "VBScript"
Dim vysledok As Double
Dim vzorec As String
vzorec = "iif(1=1,1,0)"
vysledok = sc.Eval(vzorec)

Potrebujem hlavne if funkciu.

Ako na to?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den,

VBScript neznám, funkci IIf taky ne, ale podle stránky http://www.pcreview.co.uk/forums/vbscrip... není funkce podporována. Funkci si ale lze snadno doimplementovat (kód je také na výše uvedené stránce). Použití by mohlo vypadat takto:

        Dim sc As New MSScriptControl.ScriptControl
        sc.Language = "VBScript"
        Dim vysledok As Double
        Dim vzorec As String

        Dim iff As String =
        "Public Function IIf(expression, trueResult, falseResult)" & vbCrLf &
            "If expression Then" & vbCrLf &
                "IIf = trueResult" & vbCrLf &
                "Else" & vbCrLf &
                "IIf = falseResult" & vbCrLf &
                "End If" & vbCrLf &
            "End Function"

        sc.AddCode(iff)

        vzorec = "iif(1=1,10,20)"
        vysledok = sc.Eval(vzorec) ' Vrátí 10
        vzorec = "iif(1=0,10,20)"
        vysledok = sc.Eval(vzorec) ' Vrátí 20
nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobry den.

Problemom je ze samotny program mam v vb.net. Ten funkciu iif pozna - ide o if funcku v jednom riadku.

Nepozna ale funkciu eval, tak ako napr. v MS ACCESS.

Cize v principe potrebujem aby vb.net vyhodnotil string ako expression.

Ak pouzijem :

Dim sc As New MSScriptControl.ScriptControl

sc.Language = "VBScript"

tak tento pozna funkciu eval ale zas nepozna iif, alebo nieco podobne, aspon som nenasiel.

Nasiel som toto: http://www.codeproject.com/Articles/9114...

Je to dll a funguje. Uvidim ci na nieco nenarazim.

Trocha som prekvapeny ze vb.net nema funkciu eval.

Keby bolo nieco jednoduchcie ako to dll, tak by bolo fajn.

Mozem dorobit funkciu iif, kt. bude poznat vbscript?

Karol Reich

nahlásit spamnahlásit spam 0 odpovědětodpovědět

"Mozem dorobit funkciu iif, kt. bude poznat vbscript?"

Asi si špatně rozumíme, protože se domnívám, že na tuto otázku jsem již odpověděl. Na řádcích 6-13 je implementace funkce IIf v jazyce VBScript (její kód je uložen do proměné iff typu string). Tento řetězec je předán do instance třídy MSScriptControl.ScriptControl na řádku 15. A od tohoto řádku je již možné funkci IIf používat z jazyka VBScript. Tedy kód

vzorec = "iif(1=1,1,0)"
vysledok = sc.Eval(vzorec)

již nezpůsobí chybu, o které jste mluvil v prvním příspěvku.

Co se týká knihoven, dost možná na to nějaká existuje. Zkuste hledat na codeplex.com.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jo zrovna dneska jsem používal NCalc z codeplexu. Ten výrazy počítá.

http://ncalc.codeplex.com/

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback