【问题标题】:Remove commas between double quotes in a CSV file删除 CSV 文件中双引号之间的逗号
【发布时间】: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();

谢谢。

【问题讨论】:

标签: c# file csv split comma


【解决方案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);
              }
      
          }
      

      【讨论】:

        猜你喜欢
        • 2018-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-18
        • 2017-09-28
        • 1970-01-01
        相关资源
        最近更新 更多