Galera, eu tenho uma array que gerado por um split(";"), a partir da leitura de um arquivo texto.
..
String ret[];
ret = linha.split(";");
..
Depois disso eu vou pegando as posições que preciso nesse array e vou setando set(ret[0]), set(ret[2]), set(ret[4]) etc… só que as linhas do arquivo ora vem com 236 ponto e virgulas( ; ) e ora vem com 220, ora vem com 230 etc… então quando tento pegar o indice de ret[233] ele dá java.lang.ArrayIndexOutOfBoundsException, pois não existe, nas linhas que tem o array com o tamanho acima de 233 ele vai senão dá esse erro…
teria uma forma de eu acertar isso, para que não de esse erro???
Está dando erro logo na sétima linha, pois estu tentando pegar o indice ret[223] e essa linha não tem a quantidade de ( ; ) suficiente para chegar a esse indice pois cada linha vem com tamanho diferente.
Não sei se vc está entendendo o que está acontecendo?? :?:
Ai está!!! dá erro onde está em negrito ret[223], mas como as linhas do arquivo podem vir com ( ; ) variando para mais ou menos entã pode dar erro em qualque lugar.
[code]
public void arquivo() {
String linha = null;
ArquivoTextoValida atv = new ArquivoTextoValida();
ArquivoTextoBean atb = new ArquivoTextoBean();
List l = new ArrayList();
int Array[] = null;
try {
FileReader reader = new FileReader(“arquivo.txt”);
BufferedReader leitor = new BufferedReader(reader);
/* grava o codigo-fonte no disco */
String arquivoFonte = "saida.txt";
PrintWriter saida = new PrintWriter(new BufferedWriter(new FileWriter(arquivoFonte)));
leitor.readLine();//Leio a primeira linha e descarto
while ((linha = leitor.readLine()) != null) {//Pega apartir da segunda.
String ret[];
ret = linha.split(";");
for(int j=0; j < ret.length; j++){
atb.setContrato(atv.ValidaContrato(ret[0],25));
atb.setContaCorrente(atv.ValidaContaCorrente(ret[2],ret[154]));
atb.setDesignacaoCVP(atv.ValidaDesignacaoCVP(ret[7],50));
atb.setDesignacaoPontaAB(atv.ValidaDesignacaoPontaAB(ret[8],ret[9],50));
atb.setVelocidadeCIR(atv.ValidaVelocidadeCIR(ret[11], ret[12],20));
atb.setDlciPortaAB(atv.ValidaDLCIPortaAB(ret[13],ret[14],5));
atb.setStatusFacilidadeCircuito(atv.ValidaStatusFacilidadeCircuito(ret[18],25));
String status = ret[18];
if(!status.equals("") || status != ""){
if(status.toUpperCase().equals("ATIVADA") || status.toUpperCase().equals("ATIVADA DADOS") || status.toUpperCase().equals("ATIVADA VOZ")){
atb.setDataAtividadeCadastroCVP(atv.ValidaDataAtividadeCadastramentoCVP(ret[21]));
}else if(status.toUpperCase().equals("CONTRATADA")){
atb.setDataAtividadeCadastroCVP(atv.ValidaDataAtividadeCadastramentoCVP(ret[22]));
}else{
atb.setDataAtividadeCadastroCVP("00/00/0000");
}
}else{
atb.setDataAtividadeCadastroCVP("00/00/0000");
}
atb.setDesignacaoPortaAB(atv.ValidaDesignacaoPortaAB(ret[46],ret[79],50));
atb.setVelocidadeSCRAB_BA(atv.ValidaVelocidadeSRCAB_BA(ret[166],ret[167],10));
atb.setVelocidadePCRAB_BA(atv.ValidaVelocidadePCRAB(ret[168],ret[169],10));
atb.setFacilidadePontaAB(atv.ValidaFacilidadeAB(ret[194],[b]ret[223][/b],32));
atb.setSiglaServico(atv.ValidaSiglaServico(7));
if ( !ret[43].equals(ret[76])){
atb.setPlataformaPortaAB(atv.ValidaPlataformaPortaAB(ret[43],50));
l.add(atb);
atb.setPlataformaPortaAB(atv.ValidaPlataformaPortaAB(ret[76],50));
}else{
atb.setPlataformaPortaAB(atv.ValidaPlataformaPortaAB(ret[43],50));
}
l.add(atb);//Adiciona na lista o objeto
}
}
System.out.println(“Arquivo gerado com sucesso!!”);
leitor.close();
reader.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println("Erro ao gerar arquivo de saida!! " + e);
}
}[/code]
Seguinte, porque isso acontece, fiz um teste aqui e o split() não está refletindo a quantidade de ( ; ), porque???
Ex…esse é um pedaço do arquivo, duas linhas 1º linha tem 42 ( ; ) a 2º tem 18 ( ; ), mandei ele escrever a quantidade de ( ; ) que ele está achando e ele imprime só 7 porque??? ele está pegando só até o último ( ; ) após o FRAME-RELAY o resto ele descarta porque???
To com o mesmo erro dos amigos acima… Alguém tem alguma solução para quando usamos Split em um arquivo que não seja padronizado? Ou seja, podem existir splits a mais ou a menos…
Já tentei testar se split é vazio com if, usar o tokenizer mas nada deu certo. :shock:
[quote=PhillTi]To com o mesmo erro dos amigos acima… Alguém tem alguma solução para quando usamos Split em um arquivo que não seja padronizado? Ou seja, podem existir splits a mais ou a menos…
Já tentei testar se split é vazio com if, usar o tokenizer mas nada deu certo. :shock:
Obrigado.[/quote]
Fala galera.
Depois de quebrar a cabeça aqui consegui encontrar a solução que seria testar a quantidade de arrays gerados pelo split da linha lida do arquivo e tratar de acordo com esta condição;