2016-04-12 2 views
1

J'utilise le ci-dessous function pour importer un fichier csv dans un objet datatablecsvData, mais je fais face à un problème oject reference que je voudrais comprendre plus en utilisant Regex.Replace pour enlever citation marques à partir des données:Référence de l'objet sur tableau avec 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

Quel est le contenu de 'fieldData'? –

+0

@ WiktorStribiżew: motif 'manquant' a été ajouté à la publication. le sujet 'index'' [i] 'utilisé dans la boucle n'est plus reconnu pour certaines raisons ... –

+0

' fieldData' contient plusieurs données de plusieurs types (string, float, int ...) –

Répondre

0

le fieldData[i] = Regex.Replace(fieldData[i],pattern, replacement); est en dehors du bloc {...}. Ça devrait être à l'intérieur.

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

Je suis content que cela ait fonctionné pour vous.Veuillez également considérer upvoting si ma réponse a prouvé utile pour vous (voir [Comment augmenter le dépassement de pile?] (http://meta.stackexchange.com/questions/173399/how-to-upvote-on-stack-overflow)). –