2016-04-12 1 views
1

Я использую ниже function импортировать csv файл в datatable объект csvData, однако я сталкиваюсь с oject reference вопросом, который я хотел бы понять больше, используя Regex.Replace удалить цитату следы от данных:Ссылка на объект на массиве с 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; 
    } 
+0

Какое содержимое содержится в 'fieldData'? –

+0

@ WiktorStribiżew: отсутствующий шаблон был добавлен в сообщение. значение '' '' '' [i] ', используемое в цикле, больше не распознается по некоторым причинам ... –

+0

' fieldData' содержит несколько данных нескольких типов (строка, float, int ...) –

ответ

0

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); 
    } 
} 
+0

Рад, что это сработало для вас. Также подумайте о том, (см. [Как повысить уровень переполнения стека?] (http://meta.stackexchange.com/questions/173399/how-to-upvote-on-stack-overflow)). –