如何防止特定逗号分隔值(C#)

可能重复:
处理CSV文件中的逗号

我目前正在parsingCSV文件的值,并将它们添加到数据表。

csv文件包含5列,并在将每行添加到数据表之前parsing每行。

在parsingcsv之后,数据表可以被显示如下:

| Town/City | Cost | | Birmingham | 400 | | Manchester | 500 | 

对于这个数据,没有问题。 但是,我有一些像下面这样的值:

 | Town/City | Cost | | London, West | 800 | 

由于一列的值之间有一个逗号,所以显然将其parsing为一个单独的列。

数据不能改变,所以我需要一种方法来parsing这个单列而不是两个。

这是我的代码到目前为止parsing行有5列。 我已经评论了我猜新代码需要去的地方。

  //parse csv file and return as data table public System.Data.DataTable GetCsvData() { string strLine; char[] charArray = new char[] { ',' }; List<string> strList = new List<string>(); System.Data.DataTable dt = new System.Data.DataTable("csvData"); System.IO.FileStream fileStream = null; System.IO.StreamReader streamReader = null; if (!string.IsNullOrEmpty(csvFilePath)) { fileStream = new System.IO.FileStream(csvFilePath, System.IO.FileMode.Open); streamReader = new System.IO.StreamReader(fileStream); strLine = streamReader.ReadLine(); strList = strLine.Split(charArray).ToList(); //only add first 5 columns for (int i = 0; i <= 4; i++) dt.Columns.Add(strList[i].Trim()); strLine = streamReader.ReadLine(); while (strLine != null) { strList = strLine.Split(charArray).ToList(); System.Data.DataRow dataRow = dt.NewRow(); /*THIS CODE PARSES THE ROW'S 5 COLUMNS AND NEEDS TO PARSE COMMA SEPERATED VALUES AS A SINGLE VALUE*/ for (int i = 0; i <= 4; i++) dataRow[i] = strList[i].Trim(); dt.Rows.Add(dataRow); strLine = streamReader.ReadLine(); } streamReader.Close(); return dt; } return null; } 

任何帮助,这将不胜感激,因为我很努力地find答案在谷歌。

我build议在拆分之后检查数组。 如果您发现它有N + 1列(您期望N),合并两个城市列并将其他列向下移动(strList [i] = strList [i + 1])。 否则照常处理。

当然,这只有当你只有一列有潜在的逗号时才有效。

除了像@Bahri所说的那样检查拆分数组的长度外,如果你的数据足够可预测(如你的例子),你可以检查列内容。

如果您的示例中的成本始终是一个数字,您可以检查它是否只包含数字(或使用正则expression式进行更复杂的匹配)。 如果不是,则折叠前两列。