Eu tenho um arquivo com varias linhas contendo 402 caracteres, todos “válidos”.
Eu precisava percorrer o arquivo pegando alguns caracteres em posições específicas para criar um novo arquivo csv com essas informações…
Já fiz isso em várias situações…porém dessa vez não funcionou javascript:emoticon(’:?’);
Já resolvi o problema com o código que comentei a abaixo, mas eu fiquei intrigado, ele basicamente subtrai o segundo parâmetro do primeiro e deixa ele negativo…não entendi nada:
[color=red]Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -296
at java.lang.String.substring(Unknown Source)
at app.ExtratorDeRegistros4GB.main(ExtratorDeRegistros4GB.java:40) [/color]
Segue o código:
(A parte comentada é a solução que encontrei…bem gambiarra por sinal)
[code]public class ExtratorDeRegistros4GB {
/**
* @param args
*/
public static void main(String[] args) {
FileReader fileReader = null;
FileWriter fileWriter = null;
FileWriter fileWriter2 = null;
BufferedReader leitor = null;
// String nomeDoArquivo = "D:\Documentos\ocs20110925.txt";
String nomeDoArquivo = "F:\parte1.txt";
String arquivoFinal = "F:\regs2.csv";
String arquivoConferir = "F:\Conferir2.txt";
String line = "";
try {
fileReader = new FileReader(new File(nomeDoArquivo));
fileWriter = new FileWriter(new File(arquivoFinal));
fileWriter2 = new FileWriter(new File(arquivoConferir));
leitor = new BufferedReader(fileReader);
int cont = 0;
String campo1 = "";
String campo2 = "";
String campo3 = "";
String campo4 = "";
line = "";
// char[] charArray;
while ((line = leitor.readLine()) != null) {
if(line.length() >= 402) {
campo1 = line.substring(300, 4);
campo2 = line.substring(37, 21);
campo3 = line.substring(59, 21);
campo4 = line.substring(118, 13);
// charArray = line.toCharArray();
//
// campo1 = "";
// for(int i = 398; i <= 401; i++) {
// campo1 += charArray[i];
// }
// campo2 = "";
// for(int i = 37; i <= 58; i++) {
// campo2 += charArray[i];
// }
// campo3 = "";
// for(int i = 59; i <= 80; i++) {
// campo3 += charArray[i];
// }
// campo4 = "";
// for(int i = 118; i <= 131; i++) {
// campo4 += charArray[i];
// }
//
System.out.println("=======================");
System.out.println("Campo1: " + campo1);
System.out.println("Campo2: " + campo2);
System.out.println("Campo3: " + campo3);
System.out.println("Campo4: " + campo4);
if(campo1.equals("1800")) {
fileWriter.write(campo1 + ";" + campo2 + ";" + campo3 + ";" + campo4 + ";\r\n");// + campo2 + ";" + campo3 + ";");
fileWriter2.write(line + "\r\n");
cont++;
}
}
}
System.out.println(cont + " registros \"1800\" encontrados.");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fileWriter.close();
fileWriter2.close();
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}[/code]
Por que o substring(x, y) lançou essa exceção?
Me parece tudo certo…