我正在使用TextFieldParser
類讀取CSV文件。它有兩種攝取數據行的方法:ReadFields()
和ReadLine()
。正如您可以想象的那樣,前者將數據視爲列狀,由預設分隔符分隔,而後者讀取原始數據。我使用的是前者,像這樣的代碼:如何在TextFieldParser引發錯誤時捕獲有問題的行?
using (TextFieldParser parser = new TextFieldParser(newestFile.FullName))
{
parser.Delimiters = ","
parser.HasFieldsEnclosedInQuotes = true;
while (!parser.EndOfData)
{
try
{
List<string> result = parser.ReadFields().ToList();
// do something
}
catch(MalformedLineException ex)
{
// log error to record line where it happened
}
}
}
爲MalformedLineException
美中不足的是有保證的事情,如果它符合不符合標準的解析一個行不倒下 - 這可能在一個字段中有額外的引號,例如 - 它會記錄下來,然後轉到下一行,而不會使整個事件停止。
但是,我真的想在catch塊中做的事情是記錄行的實際文本以及行號,以便更容易地找出問題所在。但我不知道如何得到它:ReadFields
即使出現錯誤也會轉移到下一行,如果我在catch塊中調用ReadLine
,它也會移到下一行,這意味着行會被跳過。它看起來不是拋出異常的一部分,或者當ReadFields
失敗時通過對象可用。
有沒有辦法使用TextFieldParser
來捕獲這些數據?
我很困惑與你陳述「但我不知道我怎樣才能得到它:閱讀字段似乎就移動到下一行,即使它的錯誤」,認爲一旦錯誤,它沒有繼續while循環並試圖弄清楚這是什麼錯誤......否則它是一個簡單的 – Rex