Galera,
estou com um grande problema em ler algumas especificas de um arquivo txt, para jogar numa tabela do banco e dela gerar um arquivo txt, com algumas condições. Meu arquivo tem as seguintes informações:
20112100000878 ADRIANO REIS DA SILVA
25112100000878 ADRIANO REIS DA SILVA
20112100002331 GEAN BATISTA DE LIMA
25112100002331 GEAN BATISTA DE LIMA
20112100002340 IGOR DIORGENIS SOARES DE SOUZA
230191Nome do pai invalido.
Quando a linha inicia com 25, os dados vão certinhos para uma tabela porque ele lê de cima p/ baixo, mas quando inicia com 23, eu tenho q pegar a linha anterior (do nome IGOR) e jogar em outra trabela (aki está o problema).
Será q alguem pode me dar uma dica de como resolver isso? Agradeço desde já pelas ajudas.
Segue abaixo um trecho do meu codigo:
try{
String linha = "";
FormFile arquivo = (FormFile)PropertyUtils.getSimpleProperty(form,"arquivo");
if(arquivo==null || arquivo.getFileSize()==0) {
request.setAttribute("erros","Erro: Arquivo não existe!");
return mapping.findForward("inicio");
}
BufferedReader br = new BufferedReader(new InputStreamReader(arquivo.getInputStream()));
linha = br.readLine(); //le a linha do cabeçalho
//tratando cabeçalho
String remessa = "";
if(linha.substring(0,2).equals("10"))
remessa = linha.substring(96,101);
else
remessa = "*****";
linha = br.readLine();
Tabela1 cp = null;
Tabela2 cp2 = null;
String matricula = "";
List listaCe = Collections.EMPTY_LIST;
List listaCo = Collections.EMPTY_LIST;
Object[] o = null;
Ce c = null;
Co co = null;
while(linha != null){
if(linha.substring(0,2).equals("25")){
cp = new Tabela1();
matricula = linha.substring(2,17).trim();
//continua, jogando informações do registro na tabela1
}else if(linha.substring(0,2).equals("13")||linha.substring(0,2).equals("23")||linha.substring(0,2).equals("93")){
cp2 = new Tabela2;
//COMO PEGAR A MATRICULA DA LINHA DE ACIMA DO REGISTRO Q COMEÇA COM 23 ??????
}
linha = br.readLine();
}
request.setAttribute("erros","Arquivo importado com sucesso!");
return mapping.findForward("inicio");
}
[quote=boone]Veja que a resposta nada tem a ver com linguagem usada mas sim com lógica !
Se vc não tem, não importa a linguagem, não irá conseguir.[/quote]
Nem ia falar nada, mas mudei de idéia. hehe
A respota realmente pode ser obtida em qualquer linguagem, a diferença é no esforço necessário pra conseguir.
em python, por exemplo, seria isso:
file = open('file.txt') # abre o arquivo
list_transf = [] # cria uma lista para armazenar o que será transferido
for line in file: # percorre as linhas do arquivo
if line.startswith('23'): # se a linha começar com 23
lst_transf.append(line[2:]) # adiciono essa linha para a transferencia
Na prática o comentário no código que coloquei seria totalmente desnecessário.
Eu tmb desconsiderei o código real que ele utilizou e deixei somente o que foi pedido no comentário somente para exemplificar mesmo.
Além disso, provavelmente seu código em java também pode ser simplificado.
Enfim, o raciocínio é o mesmo, porém a forma de se expressar é diferente.
Opa, é a linha anterior. No caso eu deveria pegar o indice e ir atrás do anterior, ficaria, conforme sugerido pelo Schuenemann:
...
linha_anterior = ''
for line in lines :
if line.startswith('23'): # se a linha começar com 23
lst_transf.append(linha_anterior[2:]) # adiciona a linha anterior
linha_anterior = line
...
A sugestão dada só funcionou se tiver apenas 1 erro, mas durante a leitura do arquivo txt, surgiram 2 erros seguidos como:
20111100000098 JESSICA SOUZA MENDONCA
25111100000098 JESSICA SOUZA MENDONCA
20252100005476 JANEIDE DE FARIAS SOUSA ANDRADE
25252100005476 JANEIDE DE FARIAS SOUSA ANDRADE
20252100005484 POLIANA EMILIA DO O
230111Nome do participante invalido. 230189Nome da mae invalido.
Alguem tem ideia de como resolver? Posso usar uma variável auxiliar?
Se aparecem 2 erros seguidos, a solução do colega Schuenemann já não funciona mais. Alguém sugere outra forma de como pegar a linha anterior sem usar “linha_anterior = line”?
20252100005484 POLIANA EMILIA DO O
230111Nome do participante invalido.
230189Nome da mae invalido.
[quote=bean]Se aparecem 2 erros seguidos, a solução do colega Schuenemann já não funciona mais. Alguém sugere outra forma de como pegar a linha anterior sem usar “linha_anterior = line”?
20252100005484 POLIANA EMILIA DO O
230111Nome do participante invalido.
230189Nome da mae invalido.
[/quote]
Não faltar nas aulas de lógica de programação vai ajudar.
O amigo de cima disse tudo.