/// <summary>
        /// creates a spreadsheet instance with width x height
        /// </summary>
        /// <param name="input">can be null</param>
        /// <param name="arguments">takes in array of integer: [width, height]</param>
        /// <returns></returns>
        public override SpreadsheetCommandResult Execute(ISheet input, params string[] arguments)
        {
            var result = new SpreadsheetCommandResult();
            int width, height;

            if (arguments.Length != 2)
            {
                result.ErrorMessage = "Invalid Arguments";
                result.Success      = false;
            }

            else if (int.TryParse(arguments[0], out width) &&
                     int.TryParse(arguments[1], out height))
            {
                if (width >= 1 && height >= 1)
                {
                    result.Spreadsheet = new SimpleSpreadsheet(width, height);
                    result.Success     = true;
                }
                else
                {
                    result.ErrorMessage = "width and height must be greater than 0";
                    result.Success      = false;
                }
            }
            else
            {
                result.ErrorMessage = "width and height must be integers greater than 0";
                result.Success      = false;
            }


            return(result);
        }
예제 #2
0
        /// <summary>
        /// update the spreadsheet with specific x/y coordinate
        /// </summary>
        /// <param name="input">input spreadsheet</param>
        /// <param name="arguments">x/y coordinate and value: [x,y,value]</param>
        /// <returns>updated spreadsheet object, error code, execution status</returns>
        public override SpreadsheetCommandResult Execute(ISheet input, params string[] arguments)
        {
            var   result = new SpreadsheetCommandResult();
            int   x, y;
            float value;

            if (arguments.Length != 3)
            {
                result.ErrorMessage = "Invalid Arguments";
                result.Success      = false;
            }
            else if (input == null)
            {
                result.ErrorMessage = "No Spreadsheet is provided";
                result.Success      = false;
            }
            else if (int.TryParse(arguments[0], out x) &&
                     int.TryParse(arguments[1], out y) &&
                     float.TryParse(arguments[2], out value)
                     )
            {
                if (!input.IsWithinRange(x, y))
                {
                    result.ErrorMessage = "Index out of range";
                    result.Success      = false;
                }
                else
                {
                    input[x, y]        = value.ToString();
                    result.Spreadsheet = input;
                    result.Success     = true;
                }
            }
            else
            {
                result.ErrorMessage = "X and Y must be integers, Value must be float value";
                result.Success      = false;
            }


            return(result);
        }
예제 #3
0
            /// <summary>
            /// Sum up the cell values in the specified range
            /// </summary>
            /// <param name="input">input spreadsheet</param>
            /// <param name="arguments">calculate the sum from cells (fromX, fromY) to (toX, toY)
            /// value will be updated to the cell (targetX, targetY)
            /// [fromX, fromY, toX, toY, targetX, targetY]
            /// </param>
            /// <returns></returns>
            public override SpreadsheetCommandResult Execute(ISheet input, params string[] arguments)
            {
                var result = new SpreadsheetCommandResult();

                int fromX, fromY, toX, toY, targetX, targetY;

                result.Success = false;

                //start the checking
                if (arguments.Length != 6)
                {
                    result.ErrorMessage = "argument must be 6 integers";
                }
                else if (!int.TryParse(arguments[0], out fromX))
                {
                    result.ErrorMessage = "fromX must a integer value";
                }
                else if (!int.TryParse(arguments[1], out fromY))
                {
                    result.ErrorMessage = "fromY must a integer values";
                }
                else if (!int.TryParse(arguments[2], out toX))
                {
                    result.ErrorMessage = "toX must a integer value";
                }
                else if (!int.TryParse(arguments[3], out toY))
                {
                    result.ErrorMessage = "toY must a integer value";
                }
                else if (!int.TryParse(arguments[4], out targetX))
                {
                    result.ErrorMessage = "targetX must a integer value";
                }
                else if (!int.TryParse(arguments[5], out targetY))
                {
                    result.ErrorMessage = "targetY must a integer value";
                }
                else if (fromX < 0 || fromY < 0 || toX >= input.Width || toY >= input.Height || targetX < 0 || targetY < 0 || targetX >= input.Width || targetY >= input.Height)
                {
                    result.ErrorMessage = "selectionout of range";
                }
                else
                {
                    //passes all validation
                    //execute the Sum operation
                    result.Success = true;
                    float sum = 0f;
                    for (int x = fromX; x <= toX; x++)
                    {
                        for (int y = fromY; y <= toY; y++)
                        {
                            float value;
                            if (input.HasValue(x, y) &&
                                float.TryParse(input[x, y].ToString(), out value))
                            {
                                sum += value;
                            }
                        }
                    }

                    input[targetX, targetY] = sum.ToString();
                    result.Spreadsheet      = input;
                }
                return(result);
            }