【发布时间】:2018-09-19 13:12:02
【问题描述】:
我试图在stackoverflow上找到任何解决方案,但没有找到。
我有一个 DataTable,从 excel 表中获得。这是一个不清楚的表,它包含许多子表(以标题开头)和它们上面的其他必要信息(可能包含空行)。例如:
Line1 : Other data...
[empty line]
Line2: Other data...
[empty line]
...................
ColA | ColB | Type |
------------------------------
AAA | BBB | IN |
AAA | BBB | OUT |
AAA | BBB | IN |
Line1 : Other data...
[empty line]
Line2: Other data...
[empty line]
...................
ColA | ColB | Type |
------------------------------
AAA | BBB | IN |
AAA | BBB | OUT |
AAA | BBB | OUT |
我想将数据表拆分为多个数据表,这些数据表以许多必要信息行开头,然后是表本身,并以空行结尾。结果,我必须得到 DataTable[] 数据类型。
我试图获取数据表部分最后一行的索引(如果 DataRow 包含“in”或“out”并且下一个索引包含空行),但我不知道是否是一个好的代码和进一步拆分数据表的好解决方案:
var indexes = dataTable.AsEnumerable()
.Where(x => x.ItemArray.All(rowCell => rowCell.ToString() == string.Empty))
.Where(
x => dataTable.Rows[dataTable.Rows.IndexOf(x) - 1].ItemArray.Any(
item => Regex.Match(
item.ToString(),
"^in|out$",
RegexOptions.IgnoreCase).Success))
.Select(x => dataTable.Rows.IndexOf(x)).ToArray();
我有两个 Where linq 条件来检查是否存在包含“in”或“out”的话。
如何按这些索引拆分 DataTable?为此,我想找到一个类似的 Linq Expression。结果,我必须得到以下表格:
表 #1
Line1 : Other data...
[empty line]
Line2: Other data...
[empty line]
...................
ColA | ColB | Type |
------------------------------
AAA | BBB | IN |
AAA | BBB | OUT |
AAA | BBB | IN |
表 #2
Line1 : Other data...
[empty line]
Line2: Other data...
[empty line]
...................
ColA | ColB | Type |
------------------------------
AAA | BBB | IN |
AAA | BBB | OUT |
AAA | BBB | OUT |
我知道如何进一步处理这些数据,但我不知道如何拆分数据表。
【问题讨论】:
-
如果只是 IN || OUT,我建议使用 String.Equals() 而不是 Regex。
-
@MwBakker String.Equals() 性能更好?
-
需要更少的系统资源,所以是的
-
感谢您的建议。