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); }
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); }
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); }