2011-11-22 8 views
0

Mon code est suspendu sur la ligne fi_get[1, 4] avec une erreur «index hors limites».Tableau multidimensionnel hors limites

Le lines var est un tableau de liste de chaînes et, à l'exécution, il contenait bien plus de 600 lignes de texte. Je ne sais pas pourquoi je ne peux pas attribuer une valeur de chaîne à [1,4]? Il attribue des valeurs à [1,0] et [1,1] et [1,2] et [1,3].

string[,] fi_get = new string[2, 11]; 

    if (lines[i].Contains("show fabric-interconnect firmware")) 
      { 
       fi_get[0, 0] = Regex.Replace(lines[i + 2], @".+Running-Kern-Vers:\s(.+)", "$1"); 
       fi_get[0, 1] = Regex.Replace(lines[i + 3], @".+Running-Sys-Vers:\s(.+)", "$1"); 
       fi_get[0, 2] = Regex.Replace(lines[i + 4], @".+Startup-Kern-Vers:\s(.+)", "$1"); 
       fi_get[0, 3] = Regex.Replace(lines[i + 5], @".+Startup-Sys-Vers:\s(.+)", "$1"); 
       fi_get[1, 0] = Regex.Replace(lines[i + 7], @".+Running-Kern-Vers:\s(.+)", "$1"); 
       fi_get[1, 1] = Regex.Replace(lines[i + 8], @".+Running-Sys-Vers:\s(.+)", "$1"); 
       fi_get[1, 2] = Regex.Replace(lines[i + 9], @".+Startup-Kern-Vers:\s(.+)", "$1"); 
       fi_get[1, 3] = Regex.Replace(lines[i + 10], @".+Startup-Sys-Vers:\s(.+)", "$1"); 
      } 

      if (lines[i].Contains("show fabric-interconnect inventory expand detail")) 
      { 
       fi_get[0, 4] = Regex.Replace(lines[i + 2], @".+Product Name:\s(.+)", "$1"); 
       fi_get[0, 5] = Regex.Replace(lines[i + 3], @".+PID:\s(.+)", "$1"); 
       fi_get[0, 6] = Regex.Replace(lines[i + 4], @".+Serial (SN):\s(.+)", "$1"); 
       fi_get[0, 7] = Regex.Replace(lines[i + 7], @".+Description:\s(.+)", "$1"); 
       fi_get[0, 8] = Regex.Replace(lines[i + 10], @".+Serial (SN):\s(.+)", "$1"); 
       fi_get[0, 9] = Regex.Replace(lines[i + 13], @".+Product Name:\s(.+)", "$1"); 
       fi_get[0, 10] = Regex.Replace(lines[i + 14], @".+PID:\s(.+)", "$1"); 
       fi_get[0, 11] = Regex.Replace(lines[i + 15], @".+Serial (SN):\s(.+)", "$1"); 
       fi_get[1, 4] = Regex.Replace(lines[i + 29], @".+Product Name:\s(.+)", "$1"); 
       fi_get[1, 5] = Regex.Replace(lines[i + 30], @".+PID:\s(.+)", "$1"); 
       fi_get[1, 6] = Regex.Replace(lines[i + 31], @".+Serial (SN):\s(.+)", "$1"); 
       fi_get[1, 7] = Regex.Replace(lines[i + 34], @".+Description:\s(.+)", "$1"); 
       fi_get[1, 8] = Regex.Replace(lines[i + 37], @".+Serial (SN):\s(.+)", "$1"); 
       fi_get[1, 9] = Regex.Replace(lines[i + 40], @".+Product Name:\s(.+)", "$1"); 
       fi_get[1, 10] = Regex.Replace(lines[i + 41], @".+PID:\s(.+)", "$1"); 
       fi_get[1, 11] = Regex.Replace(lines[i + 42], @".+Serial (SN):\s(.+)", "$1"); 
      } 
+3

Est-ce que ça souffle en réglant la valeur du tableau ou en lisant les lignes [i + 29]? –

+0

Il y a deux tableaux là-dedans; Êtes-vous sûr que les lignes [i + 29] sont un élément valide? –

Répondre

2

Je serais prêt à parier que c'est cette expression:

lines[i + 29] 

Quelle est la valeur de i au moment où ce court?

i + 29 

est probablement hors de portée. C'est la seule exception hors-limite d'index de tableau qui peut être lancée sur cette ligne si ce code est précis.

3

Une erreur que je vois est sur fi_get[0, 11] = Regex.Replace(lines[i + 15] parce que le deuxième index devrait être entre 0 et 10 !!
Même erreur sur fi_get[1, 11] = Regex.Replace(lines[i + 42].

Pour répondre à votre question

pourquoi je ne peux pas attribuer une valeur de chaîne à [1,4]?

Rappelez-vous que les tableaux C# sont basés sur zéro, donc si vous définissez fi_get[1, 4] vous pouvez attribuer des valeurs de fi_get[0, 0] à fi_get [0, 3].
Si vous souhaitez attribuer à fi_get[1, 4], vous devez définir au moins fi_get = new string[2, 5].

+0

thx j'ai réalisé ce que j'ai fait avant de commenter désolé à ce sujet :) –

+0

@johnjohnson: avez-vous résolu votre problème avec ma réponse ou avez-vous le même problème plus? – Marco