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

Posted

技术标签:

【中文标题】删除 CSV 文件中双引号之间的逗号【英文标题】:Remove commas between double quotes in a CSV file 【发布时间】:2012-10-08 15:30:56 【问题描述】:

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

谢谢。

【问题讨论】:

这可能会有所帮助...保留逗号前加双引号并后接双引号,删除所有其他逗号 这可能会有所帮助:***.com/questions/5202005/… 【参考方案1】:

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

一个流行的库是FileHelpers,在Microsoft.VisualBasic.FileIO 命名空间中有TextFieldParser

【讨论】:

谢谢。我将使用 TextFieldParser。【参考方案2】:

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

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

【讨论】:

【参考方案3】:

您可以先对数据进行一些简单的按摩,可能是这样的:

   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[]  '~' );

【讨论】:

【参考方案4】:

您可以使用此波纹管,请忽略方法名称并将文件导入您的表

  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);
        

    

【讨论】:

以上是关于删除 CSV 文件中双引号之间的逗号的主要内容,如果未能解决你的问题,请参考以下文章

从 .CSV 文件的数值中删除双引号和逗号

如果存在,则删除双引号之间的第一个逗号

opencsv写入时去掉双引号

python 我发现Crystal Reports创建的CSV文件具有双引号字段,其中一些字段在引号之间包含逗号。我们不想

在python中计算30GB + csv文件中双引号外的新行数

javascript中双引号和单引号之间的歧义