【问题标题】:Object reference on array with regex.replace()使用 regex.replace() 对数组进行对象引用
【发布时间】: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


【解决方案1】:

fieldData[i] = Regex.Replace(fieldData[i],pattern, replacement); 位于 {...} 块之外。它应该在里面。

for (int i = 0; i < fieldData.Length; i++)
{
    if (fieldData[i] == "")
    {
         fieldData[i] = null;
    }
    else 
    {
         fieldData[i] = Regex.Replace(fieldData[i],pattern, replacement); 
    }
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多