繁体   English   中英

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

[英]parsing text file to data table with irregular rows

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

文本文件包含文本

  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;

当然,因为第二行的第8列的值为“ RUN AS”。 它之间也有一个空格,这是整个行的常见分隔符,因此会在数组的长度和列的长度之间造成不匹配。

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

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

但是,理想情况下,您将拥有生成引号中的输入文件自动换行字符串的所有内容,以使您的生活更轻松。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM