2015-11-23 57 views
0

我有一個程序,它使用雙引號讀取默認格式的csv文件:默認情況下爲「A」,「B」,「C」。但是,假定用戶可以提交csv中的任何不良字符。例如「A」,「B」,「C」或A,B,C「或」A「,」B「,」C「或A,B,C。以上只是一些樣品,可能性,關鍵是如果在csv中有少於n列的時候追加空列,並且在csv中刪除額外的列,那麼可能有10000或更多的記錄,並且必須讀取csv中的所有行並插入到列表中。 csv文件不能被拒絕或拋出異常由於無效字符。怎麼能做到呢?我似乎無法找到一個共同的模式吧。在csv中處理錯誤的字符

+0

在這情況下CSV從何而來?爲什麼它編碼不正確?有一個非常簡單的規則,即當整個單元格值被引用時,內容中的引號會發生什麼情況。 – poke

+0

@poke來自客戶端的csv文件。雖然我們確實爲客戶提供格式,但我們被指示提供解決方案來處理客戶有意提供如上所述的失敗價值的情況。我們需要處理所有行。 – eulercode

+0

然後您將需要創建您自己的CSV解析器。 – poke

回答

0

如何使用正則表達式來提取字母數字字符?

string cleanedStr = Regex.Replace(str, "[^a-zA-Z0-9]", ""); 

更完整的代碼將會是這樣的

 foreach (string line in File.ReadLines(YourCSVFilePath)) 
     { 
      string[] strArr = line.Split(','); 

      foreach (string str in strArr) 
      { 
       string cleanedStr = Regex.Replace(str, "[^a-zA-Z0-9]", ""); 
       //Do your stuff with the cleanedStr here 
      } 
     } 
0

該解決方案不是一個程序化的解決方案,但它可以幫助完成一個/幾個時間的任務。我想把它留在這裏以防萬一它有幫助。

這是一個簡單的,非常好的工具與CSV文件的工作:http://csved.sjfrancke.nl/