private string GetExportLimitColumnValue(TaskColumnItem temp, string columValue) { switch (temp.ExportLimit) { case EnumGloabParas.EnumExportLimit.ExportLimit1: break; case EnumGloabParas.EnumExportLimit.ExportLimit2: columValue = ReplaceHtml(columValue).Trim(); break; case EnumGloabParas.EnumExportLimit.ExportLimit3: break; case EnumGloabParas.EnumExportLimit.ExportLimit4: break; case EnumGloabParas.EnumExportLimit.ExportLimit5: columValue = columValue.Trim(); break; case EnumGloabParas.EnumExportLimit.ExportLimit6: columValue = temp.ExportLimitText + columValue.Trim(); break; case EnumGloabParas.EnumExportLimit.ExportLimit7: columValue = columValue.Trim() + temp.ExportLimitText; break; case EnumGloabParas.EnumExportLimit.ExportLimit8: string[] itemList = temp.ExportLimitText.Value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); for (var i = 0; i < itemList.Length; i += 2) { if (itemList.Length > i + 1) { string st1 = itemList[i].TrimStart('"').TrimEnd('"'); string st2 = itemList[i + 1].TrimStart('"').TrimEnd('"'); columValue = columValue.Replace(st1, st2); } } break; case EnumGloabParas.EnumExportLimit.ExportLimit9: break; default: break; } if (temp.ExportLimitSpaceFlag) { columValue = columValue.Trim(); } return(columValue); }
private string GetRegString(TaskColumnItem temp) { string strCut = string.Empty; strCut += "(?<" + temp.DataTextType.Value + ">" + RegexString.RegexReplaceTrans(temp.StartPos.Value) + ")"; switch (temp.LimitSign) { case EnumGloabParas.EnumLimitSign.LimitSign1: strCut += ".*?"; break; case EnumGloabParas.EnumLimitSign.LimitSign2: strCut += "[^<>]*?"; break; case EnumGloabParas.EnumLimitSign.LimitSign3: strCut += "[\\u4e00-\\u9fa5]*?"; break; case EnumGloabParas.EnumLimitSign.LimitSign4: strCut += "[^\\x00-\\xff]*?"; break; case EnumGloabParas.EnumLimitSign.LimitSign5: strCut += "[\\d]*?"; break; case EnumGloabParas.EnumLimitSign.LimitSign6: strCut += "[\\x00-\\xff]*?"; break; case EnumGloabParas.EnumLimitSign.LimitSign7: strCut += temp.LimitSignText.ToString(); break; default: strCut += "[\\S\\s]*?"; break; } strCut += "(?=" + RegexString.RegexReplaceTrans(temp.EndPos.Value) + ")"; return(strCut); }
public DataTable GetDataTable(DataTable dataTable, List <TaskColumnItem> columnItemList, string html, ref string errMsg) { try { #region MyRegion string strCut = string.Empty; bool newTable = false; if (dataTable == null) { dataTable = new DataTable(); newTable = true; } foreach (var temp in columnItemList) { if (newTable) { dataTable.Columns.Add(temp.DataTextType.Value, typeof(string)); } strCut += GetRegString(temp) + "|"; } strCut = strCut.Substring(0, strCut.Length - 1); #endregion Regex re = new Regex(@strCut, RegexOptions.IgnoreCase | RegexOptions.Multiline); MatchCollection mc = re.Matches(html); if (mc.Count == 0) { return(dataTable); } #region MyRegion int rows = 0; //统计共采集了多少行 int m = 0; //计数使用 DataRow drNew; try { while (m < mc.Count) { //新建新行 drNew = dataTable.NewRow(); rows++; for (int i = 0; i < columnItemList.Count; i++) { #region columnItemList TaskColumnItem item = columnItemList[i]; if (m < mc.Count) { if (i == 0) { string tempValue = mc[m].Value; while (!tempValue.StartsWith(item.StartPos.Value, StringComparison.CurrentCultureIgnoreCase)) { int index = tempValue.IndexOf(item.StartPos.Value); if (index != -1) { tempValue = tempValue.Substring(index); continue; } m++; if (m >= mc.Count) { //退出所有循环 goto ExitWhile; } } string value = tempValue.Substring(item.StartPos.Value.Length, tempValue.Length - item.StartPos.Value.Length); if (value.IndexOf(item.EndPos.Value) != -1) { value = value.Substring(0, value.IndexOf(item.EndPos.Value)); } drNew[i] = this.GetExportLimitColumnValue(item, value); m++; } else { string tempValue = mc[m].Value; #region MyRegion if (tempValue.StartsWith(item.StartPos.Value, StringComparison.CurrentCultureIgnoreCase)) { string value = tempValue.Substring(item.StartPos.Value.Length, tempValue.Length - item.StartPos.Value.Length); drNew[i] = GetExportLimitColumnValue(item, value); m++; } else { if (tempValue.StartsWith(item.StartPos.Value, StringComparison.CurrentCultureIgnoreCase)) { m++; i--; } else { if (i < columnItemList.Count - 1) { if (!tempValue.StartsWith(columnItemList[i + 1].StartPos.Value, StringComparison.CurrentCultureIgnoreCase)) { m++; i--; } } else { m++; i--; } } } #endregion } } #endregion } dataTable.Rows.Add(drNew); drNew = null; } } catch (System.Exception ex) { throw ex; } #endregion } catch (Exception ex) { errMsg = ex.Message; } ExitWhile: return(dataTable); }