将文本文件解析为具有不规则行的数据表

本文关键字:不规则 数据表 文本 文件 | 更新日期: 2023-09-27 18:31:40

我正在尝试将文本文件中的表格数据解析为数据表。

文本

文件包含文本

  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 列的值。 它之间还有一个空格,这是整行的常见拆分字符,因此在数组的长度和列长度之间造成不匹配。

这种情况的可能解决方案是什么。

将文本文件解析为具有不规则行的数据表

假设"RUN AS"是导致您出现这种情况的唯一字符串,您可以在拆分之前运行var sanitizedLine = rowLine.Replace("RUN AS", "RUNAS"),然后在拆分后将单词分开。但是,如果这种情况更频繁地发生,您可能需要设置一个条件来检查拆分生成的数组是否与标头的长度匹配,然后在尝试添加之前将有问题的索引合并到正确长度的新数组中。

但是,理想情况下,您将让生成输入文件的任何内容都用引号括起来,以使您的生活更轻松。