using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text.RegularExpressions; using AR; namespace Project { public partial class FMain { Tuple> BarcodeRegExProcess( List patterns, List patternsEx, Class.VisionData vdata, string barcodeSymbol, string bcd, out bool IgnoreBarcode, out bool findregex) { //var patterns = PUB.Result.BCDPattern; IgnoreBarcode = false; findregex = false; //get : same symbol data List pats; if (patterns != null) { if (barcodeSymbol.isEmpty() == false) pats = patterns.Where(t => t.IsEnable == true && (string.IsNullOrEmpty(t.Symbol) || t.Symbol == barcodeSymbol)).OrderBy(t => t.Seq).ToList(); else pats = patterns.Where(t => t.IsEnable == true).OrderBy(t => t.Seq).ToList(); } else pats = new List(); List patsEx; if (patternsEx == null) patsEx = new List(); else { if (barcodeSymbol.isEmpty() == false) patsEx = patternsEx.Where(t => string.IsNullOrEmpty(t.Symbol) || t.Symbol == barcodeSymbol).OrderBy(t => t.Seq).ToList(); else patsEx = patternsEx.Where(t => t.IsEnable == true).OrderBy(t => t.Seq).ToList(); } if (pats.Any() == false) { PUB.log.AddAT($"등록된 패턴이 없습니다(SYM={barcodeSymbol})"); return new Tuple>(0, new List()); } //모델정보의 허용 심볼인지 확인한다 221017 var vm = PUB.Result.vModel; if (vm != null) { if (vm.BCD_DM == false && barcodeSymbol == "2") { PUB.log.AddAT($"모델(DM)에서 비활성:{bcd}"); IgnoreBarcode = true; return new Tuple>(0, new List()); } else if (vm.BCD_1D == false && (barcodeSymbol == "6" || barcodeSymbol == "11")) { PUB.log.AddAT($"모델(1D)에서 비활성:{bcd}"); IgnoreBarcode = true; return new Tuple>(0, new List()); } else if (vm.BCD_QR == false && (barcodeSymbol == "1")) { PUB.log.AddAT($"모델(QR)에서 비활성:{bcd}"); IgnoreBarcode = true; return new Tuple>(0, new List()); } } //이 바코드가 무시바코드에 있는지 먼저 검사한다 220718 foreach (var pt in patsEx) { //skip disable item if (pt.IsEnable == false) continue; //check regex var regx = new Regex(pt.Pattern, RegexOptions.IgnoreCase, new TimeSpan(0, 0, 10)); if (regx.IsMatch(bcd)) { PUB.log.Add($"무시바코드:{bcd},PAT:{pt.Pattern},SYM:{pt.Symbol}"); IgnoreBarcode = true; break; } } if (IgnoreBarcode) { return new Tuple>(0, new List()); } var ValueApplyCount = 0; ValueApplyCount = 0; List list = new List(); findregex = false; foreach (var pt in pats) { //skip disable item if (pt.IsEnable == false) continue; var regx = new Regex(pt.Pattern, RegexOptions.IgnoreCase, new TimeSpan(0, 0, 10)); if (regx.IsMatch(bcd)) { findregex = true; //find data var matchs = regx.Matches(bcd); foreach (System.Text.RegularExpressions.Match mat in matchs) { if (vdata == null) ValueApplyCount += 1; else { foreach (var matchdata in pt.Groups) { if (matchdata.GroupNo <= mat.Groups.Count) { var data = mat.Groups[matchdata.GroupNo]; if (PUB.SetBCDValue(vdata, matchdata.TargetPos, data.Value, pt.IsTrust)) ValueApplyCount += 1; } } } } if (vdata != null && pt.IsAmkStd)// && bcdObj.barcodeSymbol == "1") { vdata.QRInputRaw = bcd; } if (vdata != null) PUB.log.AddI($"[{pt.Description}]=>{bcd}"); list.Add(pt.Customer + "|" + pt.Description); } else { //PUB.log.AddAT($"(X)Match ({pt.Pattern}) Data={bcd}"); } } return new Tuple>(ValueApplyCount, list); } /// /// barcod eprocess /// void BarcodeProcess() { //coffee //get regexpress patterns var patterns = PUB.Result.BCDPattern; var itemC = PUB.Result.ItemDataC; var vdata = itemC.VisionData; //No Run - Confirm Data if (vdata.Confirm) return; var vm = PUB.Result.vModel; //바코드목록에서 정규식값으로 각 필드값을 기록한다. lock (vdata.barcodelist) { foreach (var item in vdata.barcodelist) { //var src = item.Value.barcodeSource; var bcd = item.Value.Data; var bcdObj = item.Value; //already checked if (bcdObj.RegExConfirm) continue; var ValueApplyCount = BarcodeRegExProcess(PUB.Result.BCDPattern, PUB.Result.BCDIgnorePattern, vdata, bcdObj.barcodeSymbol, bcd, out bool IgnoreBcd, out bool findregex); bcdObj.Ignore = IgnoreBcd; //기타바코드 무시기능 적용 221018 if (vm != null && vm.IgnoreOtherBarcode == true && findregex == false) bcdObj.Ignore = true; bcdObj.RefExApply = (ValueApplyCount?.Item1 ?? 0) > 0; bcdObj.RegExConfirm = true; } } } } }