0

すべてのカスタム関数へのすべての呼び出しを含む式があります。

IIF(FVAL(DES_CODE)=1039 OR FVAL(DES_CODE)=1040 OR FVAL(DES_CODE)=1034,0,TBLEVA(PTAX, FVAL(HOPO_GRS)))

この式を評価しようとすると、NCalcエンジンがエラーを生成しています。理由がわかりません。式で宣言されたすべての関数は、式のEvalFunctionイベントで処理されました。では、なぜこのエラーが発生するのでしょうか?

mismatched input 'OR' expecting ')' at line 1:24 missing EOF at 'OR' at line 1:47

コード -

ここで式エンジンを初期化しています。

Dim exp As New Expression(vbCode, EvaluateOptions.IgnoreCase)
AddHandler exp.EvaluateParameter, AddressOf EvalParameters
AddHandler exp.EvaluateFunction, AddressOf EvalFunction
xReturn = Convert.ToDecimal(exp.Evaluate())

これらは式のイベントです。

Public Sub EvalFunction(ByVal name As String, ByVal args As FunctionArgs)
    Select Case name.ToUpper.Trim
        Case "FVAL"
            Dim xobj = args.EvaluateParameters()
            args.Result = fc.Fval(xobj(0))
        Case "ORIGINALVAL"
            Dim xobj = args.EvaluateParameters()
            args.Result = fc.ORIGINALVAL(xobj(0))
        Case "IIF"
            Dim xobj = args.EvaluateParameters()
            args.Result = fc.IIF(xobj(0), xobj(1), xobj(2))
        Case "LOANDEDUCT"
            Dim xobj = args.EvaluateParameters()
            args.Result = fc.LOANDEDUCT(xobj(0))
        Case "TBLEVA"
            Dim xobj = args.EvaluateParameters()
            args.Result = fc.TBLEVA(xobj(0), xobj(1))
        Case "PERIODMONTH"
            args.Result = fc.PERIODMONTH()
        Case "PERIODSTART"
            args.Result = fc.PERIODSTART()
        Case "AGE"
            Dim xobj = args.EvaluateParameters()
            args.Result = fc.Age(xobj(0))
        Case "INT"
            Dim xobj = args.EvaluateParameters()
            args.Result = fc.Age(xobj(0))
    End Select
End Sub
Public Sub EvalParameters(ByVal name As String, ByVal args As ParameterArgs)
    args.Result = name
End Sub
4

1 に答える 1

2

ORs を||or or(小文字)に置き換えるだけです

IIF(FVAL(DES_CODE)=1039 || FVAL(DES_CODE)=1040 || FVAL(DES_CODE)=1034,0,TBLEVA(PTAX, FVAL(HOPO_GRS)))
于 2013-08-30T10:33:56.327 に答える