Пример #1
0
        public override ValueEval Evaluate(int srcRowIndex, int srcColumnIndex, ValueEval arg0,
                                           ValueEval arg1)
        {
            string arg;
            int    index;

            try
            {
                arg   = TextFunction.EvaluateStringArg(arg0, srcRowIndex, srcColumnIndex);
                index = TextFunction.EvaluateIntArg(arg1, srcRowIndex, srcColumnIndex);
            }
            catch (EvaluationException e)
            {
                return(e.GetErrorEval());
            }

            if (index < 0)
            {
                return(ErrorEval.VALUE_INVALID);
            }

            string result;

            if (_isLeft)
            {
                result = arg.Substring(0, Math.Min(arg.Length, index));
            }
            else
            {
                result = arg.Substring(Math.Max(0, arg.Length - index));
            }
            return(new StringEval(result));
        }
Пример #2
0
 public override ValueEval Evaluate(int srcRowIndex, int srcColumnIndex, ValueEval arg0, ValueEval arg1)
 {
     try
     {
         string needle   = TextFunction.EvaluateStringArg(arg0, srcRowIndex, srcColumnIndex);
         string haystack = TextFunction.EvaluateStringArg(arg1, srcRowIndex, srcColumnIndex);
         return(Eval(haystack, needle, 0));
     }
     catch (EvaluationException e)
     {
         return(e.GetErrorEval());
     }
 }
Пример #3
0
        public override ValueEval Evaluate(string arg)
        {
            StringBuilder result = new StringBuilder();

            for (int i = 0; i < arg.Length; i++)
            {
                char c = arg[i];
                if (TextFunction.IsPrintable(c))
                {
                    result.Append(c);
                }
            }
            return(new StringEval(result.ToString()));
        }
Пример #4
0
        public override ValueEval Evaluate(int srcRowIndex, int srcColumnIndex, ValueEval arg0)
        {
            int arg;

            try
            {
                arg = TextFunction.EvaluateIntArg(arg0, srcRowIndex, srcColumnIndex);
                if (arg < 0 || arg >= 256)
                {
                    throw new EvaluationException(ErrorEval.VALUE_INVALID);
                }
            }
            catch (EvaluationException e)
            {
                return(e.GetErrorEval());
            }
            return(new StringEval(Convert.ToString((char)arg, CultureInfo.CurrentCulture)));
        }
Пример #5
0
 public override ValueEval Evaluate(int srcRowIndex, int srcColumnIndex, ValueEval arg0, ValueEval arg1,
                                    ValueEval arg2)
 {
     try
     {
         string needle   = TextFunction.EvaluateStringArg(arg0, srcRowIndex, srcColumnIndex);
         string haystack = TextFunction.EvaluateStringArg(arg1, srcRowIndex, srcColumnIndex);
         // evaluate third arg and convert from 1-based to 0-based index
         int startpos = TextFunction.EvaluateIntArg(arg2, srcRowIndex, srcColumnIndex) - 1;
         if (startpos < 0)
         {
             return(ErrorEval.VALUE_INVALID);
         }
         return(Eval(haystack, needle, startpos));
     }
     catch (EvaluationException e)
     {
         return(e.GetErrorEval());
     }
 }
Пример #6
0
        public override ValueEval Evaluate(int srcRowIndex, int srcColumnIndex, ValueEval arg0, ValueEval arg1)
        {
            double s0;
            string s1;

            try
            {
                s0 = TextFunction.EvaluateDoubleArg(arg0, srcRowIndex, srcColumnIndex);
                s1 = TextFunction.EvaluateStringArg(arg1, srcRowIndex, srcColumnIndex);
            }
            catch (EvaluationException e)
            {
                return(e.GetErrorEval());
            }
            try
            {
                // Ask DataFormatter to handle the String for us
                string formattedStr = Formatter.FormatRawCellContents(s0, -1, s1);
                return(new StringEval(formattedStr));
            }
            catch (Exception)
            {
                return(ErrorEval.VALUE_INVALID);
            }
            //if (Regex.Match(s1, "[y|m|M|d|s|h]+").Success)
            //{
            //    //may be datetime string
            //    ValueEval result = TryParseDateTime(s0, s1);
            //    if (result != ErrorEval.VALUE_INVALID)
            //        return result;
            //}
            ////The regular expression needs ^ and $.
            //if (Regex.Match(s1, @"^[\d,\#,\.,\$,\,]+$").Success)
            //{
            //    //TODO: simulate DecimalFormat class in java.
            //    FormatBase formatter = new DecimalFormat(s1);
            //    return new StringEval(formatter.Format(s0, CultureInfo.CurrentCulture));
            //}
            //else if (s1.IndexOf("/", StringComparison.Ordinal) == s1.LastIndexOf("/", StringComparison.Ordinal) && s1.IndexOf("/", StringComparison.Ordinal) >= 0 && !s1.Contains("-"))
            //{
            //    double wholePart = Math.Floor(s0);
            //    double decPart = s0 - wholePart;
            //    if (wholePart * decPart == 0)
            //    {
            //        return new StringEval("0");
            //    }
            //    String[] parts = s1.Split(' ');
            //    String[] fractParts;
            //    if (parts.Length == 2)
            //    {
            //        fractParts = parts[1].Split('/');
            //    }
            //    else
            //    {
            //        fractParts = s1.Split('/');
            //    }

            //    if (fractParts.Length == 2)
            //    {
            //        double minVal = 1.0;
            //        double currDenom = Math.Pow(10, fractParts[1].Length) - 1d;
            //        double currNeum = 0;
            //        for (int i = (int)(Math.Pow(10, fractParts[1].Length) - 1d); i > 0; i--)
            //        {
            //            for (int i2 = (int)(Math.Pow(10, fractParts[1].Length) - 1d); i2 > 0; i2--)
            //            {
            //                if (minVal >= Math.Abs((double)i2 / (double)i - decPart))
            //                {
            //                    currDenom = i;
            //                    currNeum = i2;
            //                    minVal = Math.Abs((double)i2 / (double)i - decPart);
            //                }
            //            }
            //        }
            //        FormatBase neumFormatter = new DecimalFormat(fractParts[0]);
            //        FormatBase denomFormatter = new DecimalFormat(fractParts[1]);
            //        if (parts.Length == 2)
            //        {
            //            FormatBase wholeFormatter = new DecimalFormat(parts[0]);
            //            String result = wholeFormatter.Format(wholePart, CultureInfo.CurrentCulture) + " " + neumFormatter.Format(currNeum, CultureInfo.CurrentCulture) + "/" + denomFormatter.Format(currDenom, CultureInfo.CurrentCulture);
            //            return new StringEval(result);
            //        }
            //        else
            //        {
            //            String result = neumFormatter.Format(currNeum + (currDenom * wholePart), CultureInfo.CurrentCulture) + "/" + denomFormatter.Format(currDenom, CultureInfo.CurrentCulture);
            //            return new StringEval(result);
            //        }
            //    }
            //    else
            //    {
            //        return ErrorEval.VALUE_INVALID;
            //    }
            //}
            //else
            //{
            //    return TryParseDateTime(s0, s1);
            //}
        }