如何忽略双引号内的逗号和csv标题行(第一行)?
string csvData = File.ReadAllText(csvPath);
foreach (string row in csvData.Split('\n'))
{
if (!string.IsNullOrEmpty(row))
{
dt.Rows.Add();
int i = 0;
foreach (string cell in row.Split(','))
{
dt.Rows[dt.Rows.Count - 1][i] = cell;
i++;
}
}
}
答案 0 :(得分:3)
来自Microsoft.VisualBasic.dll
的{{3}}可以帮助满足此要求
using (TextFieldParser MyReader = new TextFieldParser(csvPath))
{
MyReader.TextFieldType = FieldType.Delimited;
MyReader.SetDelimiters(",");
MyReader.HasFieldsEnclosedInQuotes = true;
string[] currentRow;
currentRow = MyReader.ReadFields();
while(!MyReader.EndOfData)
{
DataRow row = dt.NewRow();
currentRow = MyReader.ReadFields();
for(int i = 0; i < currentRow.Length; i++)
{
row[i] = currentRow[i];
}
dt.Rows.Add(row);
}
}
根据我有限的经验,这个课程不是很快,但是如果不使用需要与应用程序重新分发的外部程序包,就可以使用它。
答案 1 :(得分:0)
我会给你一般伪代码的算法,因为这个问题并不是特定于c#,但它归结为知道你是否在一个开放的双引号内。
答案 2 :(得分:0)
使用
string[] cols = Regex.Split("\"(,\")?")
而不是拆分。
并忽略第一行。使用for循环或在foreach中使用计数器跳过第一个。
RegEx来自我的头脑,所以它可能需要一些调整,但它应该有用......
但是像这样的东西可以完全...使用csv库可能是一个考虑因素......