private void GetTemplateResultString(List <TemplateResultItem> items, TemplateResultParameter trp, StringBuilder sb) { if (trp.OrderInfo.OrderType == OrderOption.Asc) { if (trp.OrderInfo.AutoTurnDigitsToNumber && items.All(f => IsNumber(f.DataForSort))) { var x = from item in items orderby Convert.ToInt64(item.DataForSort) select item; BuildTemplateResult(x, trp, sb); } else { var x = from item in items orderby item.DataForSort select item; BuildTemplateResult(x, trp, sb); //TODO do we need to return some message? //if (oi.AutoTurnDigitsToNumber) //{ // sb.AppendLine("\r\n") // .Append("WARNING: NOT ALL STRING CAN BE SUCCESSFULLY TREATED AS A NUMBER, SO SORT IN ASCII INSTEAD OF NUMBER"); //} } } else if (trp.OrderInfo.OrderType == OrderOption.Desc) { if (trp.OrderInfo.AutoTurnDigitsToNumber && items.All(f => IsNumber(f.DataForSort))) { var x = from item in items orderby Convert.ToInt64(item.DataForSort) descending select item; BuildTemplateResult(x, trp, sb); } else { var x = from item in items orderby item.DataForSort descending select item; BuildTemplateResult(x, trp, sb); //if (trp.OrderInfo.AutoTurnDigitsToNumber) //{ // sb.AppendLine("\r\n") // .Append("WARNING: NOT ALL STRING CAN BE SUCCESSFULLY TREATED AS A NUMBER, SO SORT IN ASCII INSTEAD OF NUMBER"); //} } } else { //items.ForEach(s => sb.Append(s.Line)); BuildTemplateResult(items, trp, sb); } }
private void BuildTemplateResult(IEnumerable <TemplateResultItem> items, TemplateResultParameter trp, StringBuilder sb) { if (trp.BatchInfo != null && trp.BatchInfo.ItemsPerBatch > 0 && !string.IsNullOrEmpty(trp.BatchInfo.BatchSeparator)) { int idx = 0; foreach (var item in items) { ++idx; if (!string.IsNullOrEmpty(trp.RowNumFormat) && !string.IsNullOrEmpty(trp.RowNumPlaceHolder)) { sb.Append(item.Line.Replace(trp.RowNumPlaceHolder, string.Format(trp.RowNumFormat, idx))); } else { sb.Append(item.Line); } if (idx % trp.BatchInfo.ItemsPerBatch == 0) { sb.Append(trp.BatchInfo.BatchSeparator); } } } else { if (!string.IsNullOrEmpty(trp.RowNumFormat) && !string.IsNullOrEmpty(trp.RowNumPlaceHolder)) { int idx = 0; foreach (var item in items) { ++idx; sb.Append(item.Line).Replace(trp.RowNumPlaceHolder, string.Format(trp.RowNumFormat, idx)); } } else { items.ToList().ForEach(tri => sb.Append(tri.Line)); } } }
public IWorkResult <TemplateResult> ExecuteTemplate() { var validation = _regexFullInfo.Validate(); if (validation.IsValid == false) { return(new RegexWorkResult <TemplateResult>(null, _regexFullInfo.RegexObj, false, validation.InvalidReason)); } try { if (string.IsNullOrWhiteSpace(_regexFullInfo.Template)) { return(new RegexWorkResult <TemplateResult>(null, _regexFullInfo.RegexObj)); } _matchedResult = _matchedResult ?? GetMatchCollection(); var triEqualityComparer = new TemplateResultItemEqualityComparer(); if (_matchedResult.IsSuccess) { //List<string> items = new List<string>(); var items = new List <TemplateResultItem>(); var dic = new Dictionary <string, int>(); int duplicated = 0; StringBuilder sb = new StringBuilder(); var trp = new TemplateResultParameter(_regexFullInfo.TplParameters, _regexFullInfo.Template); //bool gotRowNumberHolder = _regexFullInfo.Template foreach (Match match in _matchedResult.Data) { var str = _regexFullInfo.RegexObj.Replace(match.Value, _regexFullInfo.Template); string str2 = string.Empty; if (trp.OrderInfo.OrderType != OrderOption.None) { if (trp.OrderInfo.GroupForSort == _regexFullInfo.Template) { str2 = str; } else { str2 = _regexFullInfo.RegexObj.Replace(match.Value, trp.OrderInfo.GroupForSort); } } if (dic.ContainsKey(str)) { if (false == _regexFullInfo.TplParameters.IgnoreDuplicated) { //items.Add(str); items.Add(new TemplateResultItem(str, str2)); } dic[str]++; } else { //items.Add(str); items.Add(new TemplateResultItem(str, str2)); dic.Add(str, 1); } } if (_regexFullInfo.TplParameters.ShowDuplicatedOnly) { var kx = from item in items join item2 in dic.Where(x => x.Value > 1).Select(kv => kv.Key).ToList() on item.Line equals item2 select item; if (_regexFullInfo.TplParameters.IgnoreDuplicated) { kx = kx.Distinct(triEqualityComparer); } GetTemplateResultString(kx.ToList(), trp, sb); } else { if (_regexFullInfo.TplParameters.IgnoreDuplicated) { //dic.Select(kv => kv.Key).ToList().ForEach(s => sb.Append(s)); var ky = items.Distinct(triEqualityComparer); GetTemplateResultString(items, trp, sb); } else { GetTemplateResultString(items, trp, sb); //items.ForEach(s => sb.Append(s)); } } var result = sb.ToString(); return(new RegexWorkResult <TemplateResult>( new TemplateResult { Result = result, ItemsOringinalCount = _matchedResult.Data.Count, Duplicated = duplicated, ItemsCount = _matchedResult.Data.Count - duplicated }, _regexFullInfo.RegexObj)); } return(new RegexWorkResult <TemplateResult>( new TemplateResult { Result = string.Empty, ItemsOringinalCount = -1, Duplicated = -1, ItemsCount = -1 }, _regexFullInfo.RegexObj)); } catch (Exception ex) { return(new RegexWorkResult <TemplateResult>(null, _regexFullInfo.RegexObj, false, ex.Message)); } }