Example #1
0
        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);
            }
        }
Example #2
0
        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));
                }
            }
        }
Example #3
0
        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));
            }
        }