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

谢谢。

4

4 回答 4

5

与其手动解析有效的 CSV 文件(引号字段中允许使用逗号),不如使用知道如何处理这些文件的 CSV 解析器。

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

于 2012-10-08T15:33:55.520 回答
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[] { '~' });
于 2012-10-08T16:01:50.933 回答
1

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

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

于 2012-10-08T15:36:28.930 回答
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);
        }

    }
于 2014-05-31T05:54:12.413 回答