2014-04-23 3 views
1
내가 사용할 때마다
string[] lines = System.IO.File.ReadAllLines(@"C:\Users\myname\Desktop\test.txt"); 
     int cnt = lines.Count(); 

     int arraynum1 = 0; 
     int arraynum2 = 1; 
     int arraynum3 = 2; 

     try 
     { 
      for (int x = 0; x < cnt; x++) 
      { 
       mc[0] = lines[arraynum1]; 
       mc[1] = lines[arraynum2]; 
       mc[2] = lines[arraynum3]; 

       arraynum1 = arraynum3 + 1; 
       arraynum2 = arraynum3 + 1; 
       arraynum3 = arraynum3 + 1; 

       ListViewItem item = new ListViewItem(new[] { mc[0], mc[1], mc[2] }); 
       listView1.Items.Add(item); 

      } 

     } 
     catch(Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 

내 내가 integer에서 설정할 때마다, 나는이 질문의 제목에 나와있는 오류 메시지가 나타납니다에서 정지하지만, 어떤 라인 지정하는 for loop에서 변수 cnt 루프에 cnt의 장소 그것은 완벽하게 작동합니다.오류 : 인덱스 배열의 범위 밖으로

답변

2

6 선 포함이 내부에 MC [0] ... MC [2] 길게 할 값 것이다하여 for 루프

반복 1 (X = 0) :

mc[0] = lines[0] 
mc[1] = lines[1] 
mc[2] = lines[2] 

2 반복 (X = 1)

mc[0] = lines[3] 
mc[1] = lines[3] 
mc[2] = lines[3] 

반복 3 (X = 2) :

01,235,
mc[0] = lines[4] 
mc[1] = lines[4] 
mc[2] = lines[4] 

반복 4 (X = 3)

mc[0] = lines[5] 
mc[1] = lines[5] 
mc[2] = lines[5] 

반복 5 (X = 4)

The exception you stated will be thrown here 
mc[0] = lines[6] 
mc[1] = lines[6] 
mc[2] = lines[6] 

반복 6 (X = 5) : 는

도달되지 않을

그래서 루프 var x를 1 늘리면 다음과 같이 3을 더합니다.

 for (int x = 0; x+2 < cnt ; x+=3) 
     { 
      mc[0] = lines[x]; 
      mc[1] = lines[x+1]; 
      mc[2] = lines[x+2]; 

      ListViewItem item = new ListViewItem(new[] { mc[0], mc[1], mc[2] }); 
      listView1.Items.Add(item); 

     } 

이 접근법은 파일이 3으로 나눌 수없는 행의 수를 포함하지 않을 수도 있다고 생각합니다.

+0

아마'arraynumX'를 모두 제거 할 가치가있을 것입니다. 그것은 당신의 솔루션이 사용하지 않는'lines' 인덱스를 추적하는 용도로만 사용되는 것 같습니다. – MrBlue

+0

내 대답을 이미 편집했습니다 .-) – Heslacher

+0

아, 댓글을 달기 전에 새로 고쳐야했습니다. :) – MrBlue

4

가되지는 시도

arraynum1 = arraynum1 + 1; 
    arraynum2 = arraynum2 + 1; 
    arraynum3 = arraynum3 + 1; 

대신

arraynum1 = arraynum3 + 1; 
    arraynum2 = arraynum3 + 1; 
    arraynum3 = arraynum3 + 1; 
+0

모든 어레이가 arraynum3보다 높고 지속적으로 필요합니다. 를 통해 텍스트 파일에서 문자열을 가져 와서 배열에 저장하고 그것을 어떻게 수행 하는지를 보여줍니다. – user3562977

2

이어야한다이 :

arraynum1 = arraynum1 + 1; 
arraynum2 = arraynum2 + 1; 
arraynum3 = arraynum3 + 1; 

현재 모든 세 가지 경우에 같은 배열 arraynum3 언급하는로 . 파일을 가정

arraynum1 = arraynum3 + 1; 
arraynum2 = arraynum3 + 1; 
arraynum3 = arraynum3 + 1;