Example #1
0
        public Program()
        {
            confName = Path.ChangeExtension(AppDomain.CurrentDomain.FriendlyName, ".xml");

            if (!File.Exists(confName))
            {
                Console.WriteLine(@"Не найден конфигурационный файл!");
                Console.WriteLine(@"Распаковываем его из внутренних ресурсов...");
                WriteResourceToFile("xConfig", confName);
            }

            config = Xml_Config.Load(confName);

            if (!Directory.Exists("logs"))
            {
                Directory.CreateDirectory("logs");
            }

            if (config.log)
            {
                Logger.SetFile("logs\\" + DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss") + ".log");
            }
            Logger.ParseLevel(config.LogLevel);

            updateDirectory();

            Logger.info("Версия программы: " + Application.ProductVersion);
            Logger.info("Уровень логирования: " + Logger.Level);
        }
Example #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);
        }