2011-11-22 5 views
0

"범위를 벗어난 인덱스"오류가있는 코드 fi_get[1, 4]에 내 코드가 걸려 있습니다.다차원 배열이 범위를 벗어났습니다.

lines var은 문자열 목록 배열이며 런타임에는 600 줄 넘는 텍스트가 포함되어 있습니다. 나는 왜 문자열 값을 [1,4]에 할당 할 수 없는지 모르겠다. 값을 [1,0][1,1][1,2][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

배열 값을 설정하거나 행 [i + 29]을 (를) 설정하는 것이 과장 되었습니까? –

+0

두 개의 배열이 있습니다. [i + 29] 행이 유효한 요소인지 확실합니까? –

답변

2

내가이 표현의 내기 것 :

lines[i + 29] 

이 실행되는 시간에 i의 가치는 무엇입니까?

i + 29 

은 아마 범위를 벗어납니다. 이 코드가 정확하다면 그 행에 던져 질 수있는 유일한 배열 인덱스 예외입니다.

3

두 번째 색인은 0과 10 사이 여야하므로 오류는 fi_get[0, 11] = Regex.Replace(lines[i + 15]에 있습니다!
fi_get[1, 11] = Regex.Replace(lines[i + 42]에서와 같은 오류가 발생했습니다. 나는 [1,4]에 문자열 값을 할당 할 수없는 이유

질문

에 응답하려면? 당신이 fi_get[1, 4]을 정의 할 경우 [0, 3]을 fi_get하는 fi_get[0, 0]의 값을 지정할 수 있도록

는, 배열은 0부터입니다 그 C 번호를 기억하십시오.
fi_get[1, 4]에 할당하려는 경우 적어도 fi_get = new string[2, 5]을 정의해야합니다.

+0

thx 나는 그것에 대해 미안하다고 생각하기 전에 내가 한 것을 깨달았다. –

+0

@ johnjohnson : 내 대답으로 문제를 해결 했습니까? 아니면 더 이상 같은 문제가 있습니까? – Marco

관련 문제