2015-10-21 107 views
0

我試圖使用LumenWorks CsvReader解析以下CSV file無法使用Lumenworks CsvReader解析CSV文件的最後一行

這是我的代碼:

using (DatabaseEntities context = new DatabaseEntities()) 
    { 
     using (var csv = new CachedCsvReader(new StreamReader(@"C:\Users\Me\Desktop\sdn.csv"), false)) 
     { 
      context.Database.ExecuteSqlCommand("TRUNCATE TABLE ofac_sdn"); 

      foreach (var entry in csv) 
      { 
       var ofac = new ofac_sdn 
       { 
        ent_num = Convert.ToInt32(entry[0]), 
        SDN_Name = entry[1], 
        SDN_Type = entry[2], 
        Program = entry[3], 
        Title = entry[4], 
        Call_Sign = entry[5], 
        Vess_type = entry[6], 
        Tonnage = entry[7], 
        GRT = entry[8], 
        Vess_flag = entry[9], 
        Vess_owner = entry[10], 
        Remarks = entry[11] 
       }; 

       context.ofac_sdn.Add(ofac); 
      } 
     } 

     context.SaveChanges(); 

對於所有的線,但最後一個,我沒有問題。 foreach中的每個entry包含正確分隔的每行信息,並且我的ofac_sdn實例加載了正確的數據。

然而,CSV文件有東西在文件的結尾奇怪,如下所示的圖像(從記事本取++):

Issue

foreach到達最後一行時,它拋出以下情況除外:

「的CSV似乎是接近記錄‘5913’字段腐敗「1在位置 ‘0’當前的原始數據:‘’」

,我能想到的最簡單,最簡單的解決方法是刪除編程試圖解析之前,該文件的最後一行,但是這看起來像一個「便宜」修復並不會解決根本問題。有任何想法嗎?

回答

0

我無法使用Lumenworks CsvReader或幾乎任何其他庫,直到我嘗試CsvHelper通過Josh Close

using (DatabaseEntities context = new DatabaseEntities()) 
{ 
    if (ofacFile != null) 
    { 
     var csv = new CsvReader(ofacFile); 
     csv.Configuration.TrimFields = true; 
     csv.Configuration.HasHeaderRecord = false; 
     context.Database.ExecuteSqlCommand("TRUNCATE TABLE ofac_sdn"); 

     while (csv.Read()) 
     { 
      if (csv.GetField<string>(0) == "\u001a") 
      { 
       break; // End of file 
      } 

      var ofac = new ofac_sdn 
      { 
       ent_num = csv.GetField<int>(0), 
       SDN_Name = csv.GetField<string>(1), 
       SDN_Type = csv.GetField<string>(2), 
       Program = csv.GetField<string>(3), 
       Title = csv.GetField<string>(4), 
       Call_Sign = csv.GetField<string>(5), 
       Vess_type = csv.GetField<string>(6), 
       Tonnage = csv.GetField<string>(7), 
       GRT = csv.GetField<string>(8), 
       Vess_flag = csv.GetField<string>(9), 
       Vess_owner = csv.GetField<string>(10), 
       Remarks = csv.GetField<string>(11) 
      }; 

      context.ofac_sdn.Add(ofac); 
     } 
    } 
} 

它是讓我真正讀到最後「腐敗」行唯一的圖書館,雖然我真的不喜歡的直接比較\u001a(這是在最後一行寫的),它確實有效。