我想解析文本文件中的表格数据到数据表中。解析文本文件到不规则行的数据表
文本文件包含文本
PID USERNAME THR PRI NICE SIZE RES STATE TIME WCPU COMMAND
11 root 1 171 52 0K 12K RUN 23:46 80.42% idle
12 root 1 -20 -139 0K 12K RUN AS 0:56 7.96% swi7:
的代码,我是喜欢
public class Program
{
static void Main(string[] args)
{
var lines = File.ReadLines("bb.txt").ToArray();
var headerLine = lines[0];
var dt = new DataTable();
var columnsArray = headerLine.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
var dataColumns = columnsArray.Select(item => new DataColumn { ColumnName = item });
dt.Columns.AddRange(dataColumns.ToArray());
for (int i = 1; i < lines.Length; i++)
{
var rowLine = lines[i];
var rowArray = rowLine.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
var x = dt.NewRow();
x.ItemArray = rowArray;
dt.Rows.Add(x);
}
}
}
我得到一个错误,“输入数组比该表中的列数不再是”在第二尝试
x.ItemArray = rowArray;
偏离过程,因为第二行的“RUN AS”值为第8列。它之间还有一个空格,它是整行的常见分割字符,因此会在数组长度和列长度之间造成不匹配。
这种情况的可能解决方案是什么?
它看起来像你的文件应该制表符分隔,但标签被替换为空格?既然它既不是固定的长度,也不是单个字符分隔的,你可能不得不考虑使用正则表达式来解析它。 – juharr
有没有任何使用正则表达式来解析表格数据的例子。如何在文本下获取文本。就像如何选择所有的USERNAME值 –
你可以改变文本文件吗?例如,如果列中可能包含两个单词,那么您可以事先将它更改为'“RUN AS”而不是'RUN AS',这种方式会更清晰。否则,您可能需要每次检查数组是否包含更多元素,并尝试从第8列开始将每个额外数据折叠到第7列。 – Ian