1
我希望能夠遍歷CSV文件中的所有記錄,並將所有良好記錄添加到一個集合中,並分別處理所有「壞」記錄。我似乎無法做到這一點,我想我必須錯過一些東西。在CsvHelper中處理錯誤的CSV記錄
如果我試圖趕上BadDataException那麼後續讀取失敗這意味着我不能繼承和讀取文件的其餘部分 -
while (true)
{
try
{
if (!reader.Read())
break;
var record = reader.GetRecord<Record>();
goodList.Add(record);
}
catch (BadDataException ex)
{
// Exception is caught but I won't be able to read further rows in file
// (all further reader.Read() result in same exception thrown)
Console.WriteLine(ex.Message);
}
}
討論的設置BadDataFound回調動作來處理它的另一種選擇 -
reader.Configuration.BadDataFound = x =>
{
Console.WriteLine($"Bad data: <{x.RawRecord}>");
};
然而,儘管回調被稱爲不良記錄在我的「好人榜」
最終還是有索姆通過這種方式,我可以向讀者查詢在添加到我的列表之前該記錄是否良好?
在這個例子中我的記錄定義是 -
class Record
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
而且數據(第一行不好,第二排好) -
"Jo"hn","Doe",43
"Jane","Doe",21
有趣的是處理與MissingFieldException缺少場似乎正好發揮作用如我所願 - 拋出異常,但後續行仍然可以正常讀取。
那麼,文件格式並沒有指定這樣的事情作爲「壞行」。你遇到的是一個損壞的文件,並進一步閱讀,猜測格式規範失敗後剩下的可能是什麼都沒有意義。這不是有效的CSV。 – nvoigt
我不明白你最後的評論,如果'MissingFieldException'是你想要什麼,你需要什麼,爲什麼它不工作? –
爲什麼不把指令if(!reader.Read())打破;在while塊中嘗試{}之前? –