2016-09-29 3 views
2

.TXT 파일의 값을 읽고 다양한 값으로 저장하려고합니다 (파일의 값은 쉼표로 구분됩니다. .Split() 메서드를 사용하고 있습니다). 이 값을 얻으려면) 나에게 나타나는 문제는 첫 번째 글자를 작성한 후 내 벡터 보조가 한계를 초과한다는 것입니다.TXT 파일을 읽는 동안 벡터가 범위를 벗어납니다.

코드 다음 TXT 파일의

String[] iltxt = new String[49]; 
String[] ertxt = new String[49]; 
String[] tcsetxt = new String[49]; 
String[] arttxt = new String[49]; 
String[] rmtxt = new String[49]; 
String[] burtxt = new String[49]; 
String[] toftxt = new String[49]; 
String[] atgtxt = new String[49]; 
String[] nrtxt = new String[49]; 
String[] hlab27txt = new String[49]; 
String[] djtxt = new String[49]; 
String[] dltxt = new String[49]; 
String[] rctxt = new String[49]; 
String[] dctxt = new String[49]; 
String[] mobtxt = new String[49]; 
String[] dtstxt = new String[49]; 
String[] sintxt = new String[49]; 
String[] diagnosticotxt = new String[49]; 
String[] aux = new String[18]; 
int cont = 1; 
     try { 
     FileReader arq = new FileReader("File.txt"); 
     BufferedReader lerArq = new BufferedReader(arq); 
     String linha = lerArq.readLine(); 
     aux = linha.split(","); 
     //STORES THE VALUES OF THE FIRST LINE INTO THE VECTORS 
     dltxt[0] = aux[0]; 
     rctxt[0] = aux[1]; 
     dctxt[0] = aux[2]; 
     mobtxt[0] = aux[3]; 
     dtstxt[0] = aux[4]; 
     iltxt[0] = aux[5]; 
     ertxt[0] = aux[6]; 
     tcsetxt[0] = aux[7]; 
     arttxt[0] = aux[8]; 
     rmtxt[0] = aux[9]; 
     burtxt[0] = aux[10]; 
     toftxt[0] = aux[11]; 
     sintxt[0] = aux[12]; 
     atgtxt[0] = aux[13]; 
     nrtxt[0] = aux[14]; 
     hlab27txt[0] = aux[15]; 
     djtxt[0] = aux[16]; 
     diagnosticotxt[0] = aux[17]; 
     //CLEAN THE VECTOR AUX TO THE NEXT READ 
     aux = null; 
     while (linha != null) { 
      //READ THE VALUES OF THE SECOND TO THE LAST LINE AND STORES INTO THE VECTORS 
      linha = lerArq.readLine(); 
      aux = linha.split(","); 
      dltxt[cont] = aux[0]; 
      rctxt[cont] = aux[1]; 
      dctxt[cont] = aux[2]; 
      mobtxt[cont] = aux[3]; 
      dtstxt[cont] = aux[4]; 
      iltxt[cont] = aux[5]; 
      ertxt[cont] = aux[6]; 
      tcsetxt[cont] = aux[7]; 
      arttxt[cont] = aux[8]; 
      rmtxt[cont] = aux[9]; 
      burtxt[cont] = aux[10]; 
      toftxt[cont] = aux[11]; 
      sintxt[cont] = aux[12]; 
      atgtxt[cont] = aux[13]; 
      nrtxt[cont] = aux[14]; 
      hlab27txt[cont] = aux[15]; 
      djtxt[cont] = aux[16]; 
      diagnosticotxt[cont] = aux[17]; 
      //CLEAN THE AUX VECTOR 
      aux = null; 
      //INCREMENT THE COUNTER TO SAVE VALUES IN THE NEXT POSITIONS OF THE VECTORS 
      cont++; 
     } 
     arq.close(); 
     } catch (IOException e) { 
      System.err.printf("Error while open the file: %s.\n", 
      e.getMessage()); 
     } 

값 :

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 

의 라인 :

Sim,Sim,Sim,Ilimitado,Sim,Ausente,Moderado,Moderado,Não,Não,Não,Não,Não,Não,Não,Negativo,Não,Espondilite Anquilosante 

Não,Não,Não,Normal,Não,Ausente,Moderado,Não,Sim,Não,Não,Não,Não,Sim,Não,Não,Não,Artrite de Gota 

Não,Não,Não,Limitado,Não,Ausente,Moderado,Não,Não,Não,Não,Sim,Não,Sim,Não,Não,Não,Artrite de Gota 

Não,Não,Não,Normal,Não,Moderado,Importante,Moderado,Não,Não,Não,Não,Não,Sim,Não,Não,Não,Artrite Reumatica 

Não,Não,Não,Limitado,Não,Muito Importante,Muito Importante,Importante,Sim,Não,Não,Sim,Sim,Sim,Não,Não,Não,Artrite de Gota 

Não,Não,Não,Limitado,Não,Moderado,Muito Importante,Não,Sim,Não,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumática 

Sim,Não,Sim,Normal,Sim,Moderado,Importante,Importante,Não,Não,Não,Não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante 

Sim,Sim,Sim,Limitado,Sim,Moderado,Importante,Não,Não,Não,Não,Não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante 

Não,Não,Não,Limitado,Não,Muito Importante,Ausente,Não,Sim,Não,Não,Não,Sim,Sim,Não,Não,Não,Artrite de Gota 

Não,Não,Não,Limitado,Não,Importante,Ausente,Leve,Sim,Sim,Não,Não,Sim,Sim,Não,Negativo,Não,Artrite Reumatica 

Sim,Não,Não,Normal,Não,Leve,Muito Importante,Não,Não,Não,Não,Não,Não,Não,Não,Negativo,Não,Espondilite Anquilosante 

Não,Não,Não,Normal,Não,Leve,Importante,Não,Sim,Sim,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumática 

Sim,Não,Não,Normal,Não,Moderado,Ausente,Não,Sim,Não,Não,Não,Sim,Sim,Não,Positivo,Não,Espondilite Anquilosante 

Não,Não,Não,Limitado,Não,Importante,Ausente,Moderado,Sim,Sim,Não,Não,Sim,Sim,Não,Não,Sim,Artrite Reumatica 

Sim,Sim,Não,Normal,Sim,Ausente,Moderado,Leve,Não,Sim,Não,Não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante 

Sim,Não,Sim,Normal,Não,Ausente,Importante,Não,Não,Não,Não,não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante 

Não,Não,Não,Normal,Não,Importante,Ausente,Não,Não,Não,Sim,Não,Não,Sim,Sim,Não,Não,Artrite Reumatica 

Sim,Sim,Não,Normal,Não,Leve,Importante,Importante,Não,Não,Não,Não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante 

Não,Não,Não,Limitado,Não,Moderado,Moderado,Moderado,Sim,Não,Não,Não,Não,Sim,Não,Não,Não,Artrite de Gota 

Não,Não,Não,Limitado,Não,Importante,Importante,Moderado,Sim,Não,Sim,Sim,Sim,Sim,Não,Não,Não,Artrite de Gota 

Não,Não,Não,Normal,Não,Importante,Importante,Não,Sim,Sim,Sim,Sim,Não,Sim,Não,Não,Não,Artrite de Gota 

Sim,Sim,Não,Normal,Sim,Ausente,Importante,Importante,Não,Sim,Não,Não,Não,Sim,Não,Positivo,Não,Espondilite Anquilosante 

Não,Não,Não,Normal,Não,Importante,Moderado,Não,Sim,Não,Sim,Sim,Sim,Sim,Não,Não,Não,Artrite de Gota 

Não,Não,Não,Limitado,Não,Moderado,Ausente,Não,Não,Não,Sim,Sim,Não,Não,Não,Não,Não,Artrite de Gota 

Não,Não,Não,Normal,Não,Importante,Importante,Não,Sim,Não,Não,Não,Sim,Sim,Não,Negativo,Não,Artrite Reumatica 

Não,Não,Não,Limitado,Não,Importante,Moderado,Moderado,Sim,Não,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumatica 

Sim,Não,Não,Normal,Não,Moderado,Importante,Não,Não,Não,Não,Não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante 

Não,Não,Não,Limitado,Não,Ausente,Ausente,Não,Sim,Não,Não,Não,Sim,Sim,Não,Negativo,Não,Artrite Reumática 

Sim,Sim,Não,Limitado,Sim,Leve,Importante,Não,Não,Sim,Não,Não,Não,Não,Não,Negativo,Não,Espondilite Anquilosante 

Não,Não,Não,Limitado,Não,Importante,Moderado,Não,Sim,Sim,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumatica 

Sim,Sim,Não,Limitado,Não,Importante,Moderado,Não,Não,Não,Não,Não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante 

Sim,Não,Não,Normal,Não,Ausente,Moderado,Moderado,Não,Não,Não,Não,Não,Sim,Não,Não,Não,Artrite de Gota 

Não,Não,Não,Limitado,Não,Moderado,Moderado,Não,Sim,Sim,Sim,Sim,Sim,Sim,Não,Não,Não,Artrite de Gota 

Sim,Sim,Não,Limitado,Sim,Importante,Muito Importante,Importante,Sim,Sim,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumatica 

Não,Não,Não,Limitado,Não,Muito Importante,Ausente,Moderado,Sim,Sim,Não,Não,Sim,Sim,Sim,Não,Não,Artrite Reumática 

Não,Não,Não,Limitado,Não,Leve,Moderado,Não,Sim,Não,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumatica 

Não,Não,Não,Limitado,Não,Moderado,Não,Sim,Não,Não,Sim,Não,Sim,Não,Não,Não,Artrite de Gota 

Sim,Sim,Sim,Limitado,Não,Moderado,Muito Importante,Moderado,Sim,Não,Não,Não,Não,Sim,Não,Positivo,Sim,Espondilite Anquilosante 

Não,Não,Não,Normal,Não,Leve,Importante,Não,Sim,Não,Não,Sim,Sim,Sim,Não,Não,Não,Artrite de Gota 

Sim,Não,Não,Normal,Não,Ausente,Moderado,Moderado,Não,Não,Não,Não,Não,Sim,Não,Positivo,Não,Espondilite Anquilosante 

Sim,Sim,Não,Normal,Não,Ausente,Ausente,Não,Não,Sim,não,Não,Não,Sim,não,Não,Não,Artrite Reumatica 

Sim,Sim,Sim,Normal,Não,Ausente,Importante,Não,Não,Não,Não,Não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante 

Sim,Não,Não,Normal,Sim,Moderado,Importante,Não,Não,Sim,Não,Não,Não,Não,Não,Positivo,Não,Espondilite Anquilosante 

Não,Não,Não,Limitado,Não,Leve,Importante,Não,Sim,Sim,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumatica 

Não,Não,Não,Limitado,Não,Leve,Moderado,Não,Sim,Sim,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumatica 

Não,Não,Não,Limitado,Não,Moderado,Importante,Não,Sim,Não,Não,Não,Sim,Sim,Não,Não,Não,Artrite Reumatica 

Não,Não,Não,Normal,Não,Importante,Importante,Não,Não,Sim,Não,Não,Não,Sim,Não,Não,Não,Artrite Reumatica 

Sim,Não,Não,Normal,Não,Leve,Importante,Não,Sim,Não,Não,Não,Sim,Sim,Não,Não,Não,Artrite de Gota 

Não,Não,Não,Normal,não,Moderado,Importante,Não,Não,Sim,Não,não,Não,Sim,Não,Não,Não,Artrite Reumatica 

코드를 실행하는 동안 나타나는 오류 오류 :

rctxt[cont] = aux[1]; 

이 문제를 해결하는 방법을 아는 사람이 있습니까? (portugues의 일부 단어에 대해 죄송합니다. 브라질 출신 임)

+2

나머지 줄을 게시하고 예외의 원인이되는 줄을 표시하십시오. –

+1

데이터를 보관할 클래스를 만드는 것이 좋습니다. 그런 다음이 객체들의 배열 하나만 있으면됩니다. –

+0

JFRAME을 사용하고 있습니다. 오류 라인을 표시하는 게시물을 업데이트합니다. – Mutante

답변

2

일부 줄에는 텍스트 (빈 줄)가없는 것처럼 보입니다.

이 줄의 분할은 18 길이 문자열 배열을 생성하지 않습니다. 당신이 더 많은 읽을 수있는 코드 만들 것이 데이터를 캡슐화하는 객체를 가지고, 위에서 언급 한 바와 같이

if (arr.length < 18) 
    continue; 

또한보십시오.

편집 대한 명확한

이 코드 지금

while (linha != null) { 
     linha = lerArq.readLine(); 
     aux = linha.split(","); 

aux 배열의 크기를 확인하지 (18) 경우에하는 것은 다음이 줄을 건너가

if (aux.length < 18) { 
     System.err.println (linha + " does not have enough values"); 
     continue; 
    } 
+0

좋아, 내가 빈 줄을 모두 지웠다. 내 파일에서 마지막 줄'diagnotxt [cont] = aux [17]'에서 같은 오류가 발생한다. 이해하지 못하기 때문에 내가 말한 조건을 사용하지 않았다. 그것. 다시 설명해 주시겠습니까? – Mutante

1

Th 행을 빈 행으로 분리하고 행을 실제로 18 개의 토큰이 있는지 확인하지 않기 때문에 예외가 발생합니다. 어느 당신은 그 빈 줄을 제거하거나과 같이 조건을 추가 :

linha = lerArq.readLine(); 

aux = linha.split(","); 
if(aux.length != 18) 
    continue; 

은 또한 당신이 당신의 라인 중 하나 (35)와 약간의 문제가있다. 그 줄은 단지 17 개의 토큰을 가지며 다음을 발생시킵니다 ArrayOutOfBoundsException 조건을 사용하지 않고 File.txt의 빈 줄을 제거하면

+0

예, 죄송합니다. 고칠거야. 아직 이른 아침에 --.- ' –

+0

좋아, 모든 빈 줄을 지웠다. 내 파일에서, 같은 줄의 오류가 진단 행의 마지막 줄에 생겼다. [cont] = aux [17], 나는 그 조건을 사용하지 않았다. 너는 내가 그것을 이해하지 않기 때문에 말했다. 다시 설명해 주시겠습니까? – Mutante

+0

@ split 당신이 split 메쏘드에서받은 토큰의 배열이 길이가 18이 아니라면 조건을 검사합니다.이 경우 continue는 프로그램을 루프 시작으로 "건너 뛰고"다음 줄로 반복하도록합니다. 당신이 지금 만나는 예외도 내 대답에 descriped입니다. 파일에있는 엔트리 중 17 개 토큰 만 있습니다. 따라서 18 번째 요소 ([17])에 액세스하려고하면 예외가 발생합니다. –

관련 문제