删除CSV文件中双引号之间的逗号

时间:2012-10-08 15:30:57

标签: c# file csv split comma

我有一个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();

感谢。

4 个答案:

答案 0 :(得分:5)

您应该使用知道如何处理这些文件的CSV解析器,而不是手工解析有效的CSV文件(引用字段中允许使用逗号)。

一个受欢迎的库是FileHelpersMicrosoft.VisualBasic.FileIO命名空间中有TextFieldParser

答案 1 :(得分:1)

使用TextFieldParser类。它可以处理引号内的commmas。

http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser.aspx

答案 2 :(得分: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[] { '~' });

答案 3 :(得分: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);
        }

    }