【发布时间】:2016-04-12 10:23:25
【问题描述】:
我正在使用以下function 将csv 文件导入datatable 对象csvData,但是我遇到了oject reference 问题,我想在使用Regex.Replace 时了解更多从数据中删除引号:
private static DataTable Gettabledata(string cpath)
{
DataTable csvData = new DataTable();
try
{
using (TextFieldParser csvReader = new TextFieldParser(cpath))
{
csvReader.SetDelimiters(new string[] { "," });
csvReader.HasFieldsEnclosedInQuotes = true;
string[] colFields = csvReader.ReadFields();
foreach (string column in colFields)
{
DataColumn datecolumn = new DataColumn(column);
datecolumn.AllowDBNull = true;
csvData.Columns.Add(datecolumn);
}
while (!csvReader.EndOfData)
{
string[] fieldData = csvReader.ReadFields();
string pattern="\""; % remove quotation mark "
string replacement=""; % replace by empty.(eg "a", a)
Regex rgx = new Regex(pattern);
for (int i = 0; i < fieldData.Length; i++)
fieldData[i] = Regex.Replace(fieldData[i],pattern, replacement); %object reference issue
{
if (fieldData[i] == "")
{
fieldData[i] = null;
}
}
csvData.Rows.Add(fieldData);
}
}
}
catch (Exception ex)
{
}
return csvData;
}
【问题讨论】:
-
fieldData的内容是什么? -
@WiktorStribiżew:缺少
pattern已添加到帖子中。由于某些原因,循环中使用的index[i]问题不再被识别... -
fieldData包含多种数据类型(字符串、浮点数、整数...) -
抱歉我的错误,
fieldData包含string type的 645 条数据,使用此function -
好吧,不知道发生了什么,但删除引号就像
fieldData[i] = fieldData[i].Replace("\"", "")一样简单。顺便说一句,看,fieldData[i] = Regex.Replace(fieldData[i],pattern, replacement);在{...}块之外。我觉得应该在里面。我认为异常是在if (fieldData[i] == "")行引发的。
标签: c# regex textfieldparser