簡體   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