2012-10-08 89 views
0

我有一個包含幾行像一個CSV文件,這一個:刪除雙引號之間的逗號文件

"bar","foo, bar","18","07/09/2012 02:08:16","payments, recent","payments, all" 

某些值包含逗號,我需要爲了得到消除這些逗號這樣的結果:

"bar","foo bar","18","07/09/2012 02:08:16","payments recent","payments all" 

我開始用這個表達式"^(\".+\"\\,?)+$"但它變得太複雜,我。


的最終目標是要分割的字符串:

string content = reader.ReadToEnd(); 

string[] lignes = contenu.Split(new[] { Environment.NewLine }, StringSplitOptions.None); 

for (int i = 1; i < lignes.Length; i++) 
{ 
    // REMOVE COMMAS 

    string[] values = csv.Split(new[] {','}); 

    // do something 
} 

reader.Close(); 

感謝。

+0

這可能會有所幫助...請保留逗號前面加雙引號併成功加上雙引號,刪除所有其他逗號 – dannyrosalex

+0

這可能有所幫助:http:// stack overflow.com/questions/5202005/regex-how-to-remove-comma-which-is-between-and – Luftwaffe

回答

5

您應該使用知道如何處理這些文件的CSV解析器,而不是手動解析有效的CSV文件(引號字段中允許使用逗號)。

一個流行的庫是FileHelpers並且在Microsoft.VisualBasic.FileIO命名空間中有TextFieldParser

+0

謝謝。我將使用TextFieldParser。 –

1

你可以做數據的一些簡單的按摩第一,這樣的事情也許:

string content = "\"bar\",\"foo, bar\",\"18\",\"07/09/2012 02:08:16\",\"payments, recent\",\"payments, all\""; 

    content = content.Replace("\",\"", "~"); 
    content = content.Replace(",", ""); // Safe to remove commas now. 
    content = content.Replace("\"", ""); // Get rid of left over double quotes. 

    string[] values = content.Split(new[] { '~' }); 
0

您可以使用此波紋管請忽略方法名和導入文件到您的表

private void ImportCSV(string filePath = @"E:\nucc_taxonomy_140.csv", string tableName = "TempTaxonomyCodes") 
    { 
     string tempPath = System.IO.Path.GetDirectoryName(filePath); 
     string strConn = @"Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + tempPath + @"\;Extensions=asc,csv,tab,txt"; 
     OdbcConnection conn = new OdbcConnection(strConn); 
     OdbcDataAdapter da = new OdbcDataAdapter("Select * from " + System.IO.Path.GetFileName(filePath), conn); 
     DataTable dt = new DataTable(); 
     da.Fill(dt); 

     using (SqlBulkCopy bulkCopy = new SqlBulkCopy(ConfigurationSettings.AppSettings["dbConnectionString"])) 
     { 
      bulkCopy.DestinationTableName = tableName; 
      bulkCopy.BatchSize = 50; 
      bulkCopy.WriteToServer(dt); 
     } 

    }