示例#1
0
        /**
         * returns the OperationEval concrete impl instance corresponding
         * to the supplied operationPtg
         */
        public static ValueEval Evaluate(OperationPtg ptg, ValueEval[] args,
                                         OperationEvaluationContext ec)
        {
            if (ptg == null)
            {
                throw new ArgumentException("ptg must not be null");
            }
            NPOI.SS.Formula.Functions.Function result = _instancesByPtgClass[ptg] as NPOI.SS.Formula.Functions.Function;

            FreeRefFunction udfFunc = null;

            if (result == null)
            {
                if (ptg is AbstractFunctionPtg)
                {
                    AbstractFunctionPtg fptg = (AbstractFunctionPtg)ptg;
                    int functionIndex        = fptg.FunctionIndex;
                    switch (functionIndex)
                    {
                    case NPOI.SS.Formula.Function.FunctionMetadataRegistry.FUNCTION_INDEX_INDIRECT:
                        udfFunc = Indirect.instance;
                        break;

                    case NPOI.SS.Formula.Function.FunctionMetadataRegistry.FUNCTION_INDEX_EXTERNAL:
                        udfFunc = UserDefinedFunction.instance;
                        break;

                    default:
                        result = FunctionEval.GetBasicFunction(functionIndex);
                        break;
                    }
                }
            }

            if (result != null)
            {
                if (result is ArrayFunction)
                {
                    ArrayFunction func = (ArrayFunction)result;
                    ValueEval     eval = EvaluateArrayFunction(func, args, ec);
                    if (eval != null)
                    {
                        return(eval);
                    }
                }
                return(result.Evaluate(args, ec.RowIndex, (short)ec.ColumnIndex));
            }
            else if (udfFunc != null)
            {
                return(udfFunc.Evaluate(args, ec));
            }
            throw new Exception("Unexpected operation ptg class (" + ptg.GetType().Name + ")");
        }
示例#2
0
        static void Main(string[] args)
        {
            var random1       = new Random();
            int CountElements = random1.Next(1, 20);

            int[] array = new int[CountElements];

            ArrayFunction.ArrayElements(array);

            ArrayFunction.WriteElements(array);

            int sum = ArrayFunction.ArraySumPositive(array);

            Console.WriteLine($"Сумма неотрицательных элементов массива {sum}");

            Console.ReadKey();
        }
示例#3
0
        static void Main(string[] args)
        {
            var random1 = new Random();
            int n1      = random1.Next(1, 20);
            int n2      = random1.Next(1, 20);
            int n3      = random1.Next(1, 20);

            int[,,] array = new int[n1, n2, n3];

            ArrayFunction.ArrayElements(array);

            ArrayFunction.ArrayReplacement(array);

            Console.WriteLine("Элементы заменены");

            Console.ReadKey();
        }
示例#4
0
        public ValueEval Evaluate(ValueEval[] args, OperationEvaluationContext ec)
        {
            int nIncomingArgs = args.Length;

            if (nIncomingArgs < 1)
            {
                throw new Exception("function name argument missing");
            }

            ValueEval nameArg      = args[0];
            String    functionName = string.Empty;

            if (nameArg is FunctionNameEval)
            {
                functionName = ((FunctionNameEval)nameArg).FunctionName;
            }
            else
            {
                throw new Exception("First argument should be a NameEval, but got ("
                                    + nameArg.GetType().Name + ")");
            }
            FreeRefFunction targetFunc = ec.FindUserDefinedFunction(functionName);

            if (targetFunc == null)
            {
                throw new NotImplementedFunctionException(functionName);
            }
            int nOutGoingArgs = nIncomingArgs - 1;

            ValueEval[] outGoingArgs = new ValueEval[nOutGoingArgs];
            Array.Copy(args, 1, outGoingArgs, 0, nOutGoingArgs);
            if (targetFunc is ArrayFunction)
            {
                ArrayFunction func = (ArrayFunction)targetFunc;
                ValueEval     eval = OperationEvaluatorFactory.EvaluateArrayFunction(func, outGoingArgs, ec);
                if (eval != null)
                {
                    return(eval);
                }
            }
            return(targetFunc.Evaluate(outGoingArgs, ec));
        }
示例#5
0
        static void Main(string[] args)
        {
            var random1 = new Random();
            int n1      = random1.Next(1, 5);
            int n2      = random1.Next(1, 5);

            int[,] array = new int[n1, n2];
            for (int i = 0; i < n1; i++)
            {
                ArrayFunction.ArrayElements(array);
            }

            ArrayFunction.WriteElements(array);

            int sum = ArrayFunction.ArraySumEven(array);

            Console.WriteLine($"Сумма элементов на четных позициях {sum}");

            Console.ReadKey();
        }
示例#6
0
        public static ValueEval EvaluateArrayFunction(ArrayFunction func, ValueEval[] args,
                                                      OperationEvaluationContext ec)
        {
            IEvaluationSheet evalSheet = ec.GetWorkbook().GetSheet(ec.SheetIndex);
            IEvaluationCell  evalCell  = evalSheet.GetCell(ec.RowIndex, ec.ColumnIndex);

            if (evalCell != null)
            {
                if (evalCell.IsPartOfArrayFormulaGroup)
                {
                    // array arguments must be evaluated relative to the function defining range
                    Util.CellRangeAddress ca = evalCell.ArrayFormulaRange;
                    return(func.EvaluateArray(args, ca.FirstRow, ca.FirstColumn));
                }
                else if (ec.IsArraymode)
                {
                    return(func.EvaluateArray(args, ec.RowIndex, ec.ColumnIndex));
                }
            }
            return(null);
        }
示例#7
0
        private static void UseCollectionOperators()
        {
            Console.WriteLine("Collection Operators");
            var db = _Database;

            // # tag::query-collection-operator[]
            using (var query = QueryBuilder.Select(
                       SelectResult.Expression(Meta.ID),
                       SelectResult.Property("name"),
                       SelectResult.Property("public_likes"))
                               .From(DataSource.Database(db))
                               .Where(Expression.Property("type").EqualTo(Expression.String("hotel"))
                                      .And(ArrayFunction.Contains(Expression.Property("public_likes"),
                                                                  Expression.String("Armani Langworth"))))) {
                foreach (var result in query.Execute())
                {
                    var publicLikes = result.GetArray("public_likes");
                    var jsonString  = JsonConvert.SerializeObject(publicLikes);
                    Console.WriteLine($"Public Likes :: {jsonString}");
                }
            }
            // # end::query-collection-operator[]
        }
示例#8
0
        static void Main(string[] args)
        {
            var random1 = new Random();

            int countElements = random1.Next(1, 20);

            int[] array = new int[countElements];

            ArrayFunction.ArrayElements(array);

            ArrayFunction.WriteElements(array);

            ArrayFunction.SortElements(array);

            Console.WriteLine("\n Отсортированный массив");

            ArrayFunction.WriteElements(array);

            Console.WriteLine($"\n Минимальный элемент массива {array[0]}");

            Console.WriteLine($"\n Максимальный элемент массива {array[array.Length - 1]}");

            Console.ReadKey();
        }