Esempio n. 1
0
        /// <summary>
        /// Обрабатывает очередной символ
        /// </summary>
        /// <param name="nextChar">Очередной символ</param>
        /// <returns>Состояние операции преобразования</returns>
        public State AddSymbol(char nextChar)
        {
            //Если обнаружен разделитель или конец файла
            if (Settings.Delimiters.Any(delim => delim.Equals(nextChar)) || nextChar.Equals(char.MinValue))
            {
                //Если до разделителя не обнаружено число
                if (_digitParser == null)
                {
                    return(State.Incorrect);
                }

                //Определяет распознанное число как X или Y в паре координат
                if (_curParsePairCoord == null)
                {
                    _curParsePairCoord = new Coordinate
                    {
                        X = _digitParser.ResultDigit
                    };
                }
                else
                {
                    _curParsePairCoord.Y = _digitParser.ResultDigit;
                    //Добавить координаты в хранилище
                    _coordinatesStore.Add(_curParsePairCoord);
                    Clear();
                    return(State.PairDone);
                }
                //Очищаем распознанное число
                _digitParser = null;
                return(State.Accept);
            }

            //Пропуск незначимых символов
            if (char.IsWhiteSpace(nextChar))
            {
                return(State.Ignore);
            }

            if (_digitParser == null)
            {
                _digitParser = new DigitParser()
                {
                    NumberFormatInfo = Settings.NumberFormat
                };
            }

            //Формируем число
            return(_digitParser.AddChar(nextChar));
        }
Esempio n. 2
0
 /// <summary>
 /// Сбрасывает состояние парсера координат
 /// </summary>
 public void Clear()
 {
     _curParsePairCoord = null;
     _digitParser       = null;
 }