private IDev2Tokenizer CreateSplitPattern(ref string stringToSplit, IEnumerable <DataSplitDTO> args, IDataListCompiler compiler, Guid dlId, out ErrorResultTO errors) { Dev2TokenizerBuilder dtb = new Dev2TokenizerBuilder { ToTokenize = stringToSplit, ReverseOrder = ReverseOrder }; errors = new ErrorResultTO(); foreach (DataSplitDTO t in args) { var fieldName = t.OutputVariable; t.At = t.At ?? ""; if (!string.IsNullOrEmpty(_datalistString)) { var isValidExpr = new IsValidExpressionRule(() => fieldName, _datalistString) { LabelText = fieldName }; var errorInfo = isValidExpr.Check(); if (errorInfo != null) { errors.AddError(errorInfo.Message); continue; } } IBinaryDataListEntry entry; string error; switch (t.SplitType) { case "Index": try { entry = compiler.Evaluate(dlId, enActionType.User, t.At, false, out errors); string index = DataListUtil.GetValueAtIndex(entry, 1, out error); int indexNum = Convert.ToInt32(index); if (indexNum > 0) { dtb.AddIndexOp(indexNum); } } catch (Exception ex) { errors.AddError(ex.Message); } break; case "End": dtb.AddEoFOp(); break; case "Space": dtb.AddTokenOp(" ", t.Include); break; case "Tab": dtb.AddTokenOp("\t", t.Include); break; case "New Line": if (stringToSplit.Contains("\r\n")) { dtb.AddTokenOp("\r\n", t.Include); } else if (stringToSplit.Contains("\n")) { dtb.AddTokenOp("\n", t.Include); } else if (stringToSplit.Contains("\r")) { dtb.AddTokenOp("\r", t.Include); } break; case "Chars": if (!string.IsNullOrEmpty(t.At)) { entry = compiler.Evaluate(dlId, enActionType.User, t.At, false, out errors); string val = DataListUtil.GetValueAtIndex(entry, 1, out error); string escape = t.EscapeChar; if (!String.IsNullOrEmpty(escape)) { entry = compiler.Evaluate(dlId, enActionType.User, t.EscapeChar, false, out errors); escape = DataListUtil.GetValueAtIndex(entry, 1, out error); } dtb.AddTokenOp(val, t.Include, escape); } break; } _indexCounter++; } return(string.IsNullOrEmpty(dtb.ToTokenize) || errors.HasErrors() ? null : dtb.Generate()); }