【发布时间】:2011-11-27 20:47:21
【问题描述】:
我目前正在解析 CSV 文件中的值并将它们添加到数据表中。
csv 文件包含 5 列,并在将每一行添加到数据表之前对其进行解析。
解析csv后,数据表可视化如下:
| Town/City | Cost |
| Birmingham | 400 |
| Manchester | 500 |
对于这些数据,没有问题。但是,我有一些如下所示的值:
| Town/City | Cost |
| London, West | 800 |
由于一列的值之间有逗号,因此显然将其解析为单独的列。
数据无法更改,因此我需要一种方法将其解析为单列而不是两列。
到目前为止,这是我的代码,它解析有 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;
}
如果我在谷歌上努力寻找答案,我们将不胜感激。
【问题讨论】:
-
看起来 CSV 无效。包含逗号的字段应使用引号进行转义。
-
你不能在 csv 中使用另一个分隔符吗?像分号
-
不能更改数据是个大问题!这就是人们使用不同分隔符或用双引号限定每个值的全部原因。