[英]How to fix ConvertException while writting to a txt file with the FileHelpers library?
[英]How do I fix a ConvertException while importing a csv file with the filehelpers library
我正在處理一個csv文件,由於用戶輸入錯誤,偶爾在int字段中有文本。 這是第一列,基本上它應該是一個獨特的記錄ID。 我正在使用engine.ErrorManager.ErrorMode = ErrorMode.SaveAndContinue;
捕獲錯誤engine.ErrorManager.ErrorMode = ErrorMode.SaveAndContinue;
我寧願做的只是忽略錯誤並用我選擇的數值替換文本,並且仍然在處理結果中包含該行。
我甚至可以使用我在文件定義類文件中聲明的默認值: [FieldNullValue(typeof(int), "0")]
另一件事是我在運行時確定要解析的文件,如下所示:
Type t = assembly.GetType(assemblyName.Name + ".FileDefinitions." + className);
FileHelperEngine engine = new FileHelperEngine(t);
所以我不確定如何在<CustomersFixedWithNumericId>
的內容中實現D.Lambert的建議所以澄清有7個不同的文件定義(類文件)上傳/處理,但所有這些都有CustomerId領域。
鑒於FileHelpers的當前狀態,您必須將該字段定義為字符串並嘗試對其進行自己的驗證。
我看了幾種不同的解決方法 - 首先,我嘗試使用屬性而不是字段來設置記錄。 可以想象,這可以讓您創建一個String屬性並驗證Set上的輸入。 事實證明這很困難,因為:
下一步計划:按原樣使用記錄定義,並在讀取期間進行驗證。 在引擎上設置事件處理程序:
engine.AfterReadRecord += new Events.AfterReadHandler<CustomersFixedWithNumericId>(engine_AfterReadRecord);
var res = engine.ReadFile(path);
然后處理處理程序中的錯誤值:
void engine_AfterReadRecord(EngineBase engine, Events.AfterReadEventArgs<CustomersFixedWithNumericId> e)
{
int intVal;
int.TryParse(e.Record.CustomerID, out intVal);
e.Record.CustomerID = intVal.ToString();
}
這些都不是完美的,但我認為第二個是相當接近的。
附錄:這顯示了上面使用后期類的技術:
public void TestMethod1()
{
var assembly = System.Reflection.Assembly.GetExecutingAssembly();
Type t = assembly.GetType("FileHelpers.Tests.CustomersFixedWithNumericId");
FileHelperEngine engine = new FileHelperEngine(t);
string path = @"pathtofile\BadCustomersFixedNumericId.txt";
engine.AfterReadRecord += new Events.AfterReadHandler<object>(engine_AfterReadRecord);
var res = engine.ReadFile(path);
}
void engine_AfterReadRecord(EngineBase engine, Events.AfterReadEventArgs<object> e)
{
// validation here
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.