我有一个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 :(得分:5)
您应该使用知道如何处理这些文件的CSV解析器,而不是手工解析有效的CSV文件(引用字段中允许使用逗号)。
一个受欢迎的库是FileHelpers,Microsoft.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);
}
}