[英]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.