Пример #1
0
            protected static bool validateCell(Worksheet worksheet, RegExCache regExCache, ref int index, Xml_Equal rule, int Y, int X)
            {
                bool useRegex      = rule.regex_pattern != null;
                bool validateRegex = rule.validate == "regex";

                string cell;

                try
                {
                    cell = worksheet.Cells[Y, X].Value.ToString();
                }
                catch (Exception ex)
                {
                    Logger.debug($"Произошла ошибка при чтении ячейки Y={Y},X={X}!");
                    Logger.debug($"Ожидалось: {rule.Text}");
                    Logger.debug("Ошибка: " + ex.Message);
                    Logger.info($"Форма не подходит по условию №{index}");
                    return(false);
                }

                string origcell = cell;

                if (useRegex && !validateRegex)
                {
                    cell = regExCache.MatchGroup(cell, rule.regex_pattern, rule.regex_group);
                }

                bool failed = false;

                // ReSharper disable once ConvertIfToOrExpression
                if (rule.Text != cell && !validateRegex)
                {
                    failed = true;
                }
                if (validateRegex && !regExCache.IsMatch(cell, rule.Text))
                {
                    failed = true;
                }

                if (failed)
                {
                    if (validateRegex || useRegex)
                    {
                        Logger.debug("Провалена проверка по регулярному выражению!");
                    }
                    Logger.debug($"Проверка провалена (Y={Y},X={X})");
                    Logger.debug($"Ожидалось: {rule.Text}");
                    Logger.debug($"Найдено: {cell}");
                    if (useRegex)
                    {
                        Logger.debug($"Оригинальная ячейка: {origcell}");
                        Logger.debug($"Регулярное выражение: {rule.regex_pattern}");
                        Logger.debug($"Группа для поиска: {rule.regex_group}");
                    }
                    Logger.info($"Форма не подходит по условию №{index}");
                    return(false);
                }
                Logger.debug($"Y={Y},X={X}: {rule.Text}{(validateRegex ? " is match" : "==")}{cell}");
                return(true);
            }
Пример #2
0
        public Xml_Form findCorrectForm(Worksheet worksheet, Xml_Config pConfig)
        {
            RegExCache regExCache = new RegExCache();

            foreach (Xml_Form form in pConfig.Forms)
            {
                bool correct = true;
                Logger.info("");
                Logger.info($"Проверяем форму \"{form.Name}\"");
                Logger.debug("==========================================");

                int index = 1;
                foreach (Xml_Equal rule in form.Rules)
                {
                    bool useRegex      = rule.regex_pattern != null;
                    bool validateRegex = rule.validate == "regex";

                    string cell;

                    try
                    {
                        cell = worksheet.Cells[rule.Y, rule.X].Value.ToString();
                    }
                    catch (Exception ex)
                    {
                        Logger.debug($"Произошла ошибка при чтении ячейки Y={rule.Y},X={rule.X}!");
                        Logger.debug($"Ожидалось: {rule.Text}");
                        Logger.debug("Ошибка: " + ex.Message);
                        Logger.info($"Форма не подходит по условию №{index}");
                        correct = false;
                        break;
                    }

                    string origcell = cell;
                    if (useRegex && !validateRegex)
                    {
                        cell = regExCache.MatchGroup(cell, rule.regex_pattern, rule.regex_group);
                    }

                    bool failed = false;
                    if (rule.Text != cell && !validateRegex)
                    {
                        failed = true;
                    }
                    if (validateRegex && !regExCache.IsMatch(cell, rule.Text))
                    {
                        failed = true;
                    }

                    if (failed)
                    {
                        if (validateRegex || useRegex)
                        {
                            Logger.debug("Провалена проверка по регулярному выражению!");
                        }
                        Logger.debug($"Проверка провалена (Y={rule.Y},X={rule.X})");
                        Logger.debug($"Ожидалось: {rule.Text}");
                        Logger.debug($"Найдено: {cell}");
                        if (useRegex)
                        {
                            Logger.debug($"Оригинальная ячейка: {origcell}");
                            Logger.debug($"Регулярное выражение: {rule.regex_pattern}");
                            Logger.debug($"Группа для поиска: {rule.regex_group}");
                        }
                        Logger.info($"Форма не подходит по условию №{index}");
                        correct = false;
                        break;
                    }
                    Logger.debug($"Y={rule.Y},X={rule.X}: {rule.Text}{(validateRegex ? " is match" : "==")}{cell}");
                    index++;
                }
                if (correct)
                {
                    Logger.info($"Форма '{form.Name}' подходит для документа!");
                    return(form);
                }
            }
            return(null);
        }
Пример #3
0
            public static Xml_Form findCorrectForm(Worksheet worksheet, List <Xml_Form> forms)
            {
                RegExCache regExCache = new RegExCache();

                foreach (Xml_Form form in forms)
                {
                    bool correct = true;
                    Logger.info("");
                    Logger.info($"Проверяем форму \"{form.Name}\"");
                    Logger.debug("==========================================");

                    int index = 0;
                    foreach (Xml_Equal_Base equalBase in form.Rules)
                    {
                        index++;
                        if (equalBase is Xml_Equal_Group group)
                        {
                            Logger.debug($"Проверка группы №{index}!");

                            var point = findGroupPosition(worksheet, group);
                            if (point == null)
                            {
                                correct = false;
                                break;
                            }

                            foreach (Xml_Equal xmlEqual in group.Rules)
                            {
                                int innerX = point.Value.X + xmlEqual.X.Value;
                                int innerY = point.Value.Y + xmlEqual.Y.Value;

                                if (!validateCell(worksheet, regExCache, ref index, xmlEqual, innerY, innerX))
                                {
                                    correct = false;
                                    break;
                                }
                            }
                            if (correct == false)
                            {
                                break;
                            }
                        }
                        if (equalBase is Xml_Equal rule)
                        {
                            int X = rule.X ?? throw new ArgumentException("X для условия не может быть пустым!", nameof(rule.X));
                            int Y = rule.Y ?? throw new ArgumentException("Y для условия не может быть пустым!", nameof(rule.Y));
                            if (!validateCell(worksheet, regExCache, ref index, rule, Y, X))
                            {
                                correct = false;
                                break;
                            }
                        }
                    }
                    if (correct)
                    {
                        Logger.info($"Форма '{form.Name}' подходит для документа!");
                        return(form);
                    }
                }
                return(null);
            }