2017-02-20 28 views
0

我StackOverflow上讀到這裏很多問題,試圖找到一個解決一個簡單的問題。我正在使用FileHelpers庫導入CSV文件。該CSV文件的最後一列沒有分隔符,當我試圖導入我的錯誤當爲FileHelpers導入CSV文件時,爲什麼要將類模型的最後一列標記爲可選項?

Line: 2 Column: 179. Delimiter ',' not found after field 'Active' (the record has less fields, the delimiter is wrong or the next field must be marked as optional) 

這是正確的,因爲我的文件看起來像

...,Clip Ons,,D02,8 Card Wallet,Y 
...,D02,Bathurst Chain Crossbody,Y 

一個解決方案,我發現是標記最後一列使用屬性FieldOptional。問題是該列不是可選的;如果最後一列爲空,它必須拋出一個錯誤。

我如何處理這種情況,避免「FieldOptional」屬性?

+0

它聽起來像CSV有更多的記錄比你預期的.... – BugFinder

+0

你顯示你的csv的兩條線是不一樣的!第一行有6個字段,第二行只有4. –

+0

@ChrisDunaway這只是一個例子,表明我在行尾沒有分隔符 – Phate01

回答

0

您正在使用哪個版本?隨着FileHelpers 3.1.5,這工作得很好:

[DelimitedRecord(",")] 
[IgnoreEmptyLines] 
public class MySpec 
{ 
    public string Column1; 
    public string Column2; 
    public string Column3; 
    public string Column4; 
    public string Column5; 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var fileHelpersEngine = new FileHelperEngine<MySpec>(); 
     var records = fileHelpersEngine.ReadString("Clip Ons,,D02,8 Card Wallet,Y"); 
     var firstRecord = records.First(); 
     Assert.AreEqual("Clip Ons", firstRecord.Column1); 
     Assert.AreEqual(string.Empty, firstRecord.Column2); 
     Assert.AreEqual("D02", firstRecord.Column3); 
     Assert.AreEqual("8 Card Wallet", firstRecord.Column4); 
     Assert.AreEqual("Y", firstRecord.Column5); 
     Console.ReadKey(); 
    } 
} 

與舊版本(2.0,如果我沒記錯的話),你需要添加一個額外多(空)屬性並將其標記[FieldOptional]。這意味着:最後一個分隔符是可選的,我不關心最後一個分隔符後的任何內容。

,以便類會再看看這樣的:

[DelimitedRecord(",")] 
[IgnoreEmptyLines] 
public class MySpec 
{ 
    public string Column1; 
    public string Column2; 
    public string Column3; 
    public string Column4; 
    public string Column5; 
    [FieldOptional] 
    public string Dummy; 
} 

這個類也可與上面的例子。

+0

我有版本2.9.9。我其實試圖實現你的第二個解決方案,但我仍然得到了錯誤 – Phate01

+0

我測試了它,它的工作原理。我這邊的問題是我們使用基於db表的動態引擎,但我認爲這個問題與我們動態構建FileHelpersEngine無關。 – Phate01

+0

如果需要,您仍然可以動態添加額外的'FieldOptional'。 '字段= classBuilder.AddField( 「虛擬」 的typeof(字符串));'然後'field.FieldOptional = TRUE;' – shamp00

相關問題