Tratamento de extrato bancário em txt para em Java

1 resposta
F

Boa tarde pessoal,

Sou novo em Java e estou fazendo um texto bastante complicado para quem é iniciante. Preciso extrair apenas alguns dados de um extrato em txt para que sejam exibidos em determinada tela.

Essa é a estrutura do extrato no Notepad++.

================================================================================================================================================================
Extrato conta corrente A33B291136634142013
29/08/2017 11:43:41

Cliente - Cliente atual

Agência 3041-4
Conta corrente 140154-8 LINEA VERDE ALIM LTDA
Período do extrato

Lançamentos

Dt. movimento Dt. balancete Ag. origem Lote Histórico Documento Valor R$ Saldo
25/08/2017 0000 00000 000 Saldo Anterior 367,26 C
28/08/2017 0426 16593 830 Depósito Online 4.261.659.300.644 1.388,38 C 1.755,64 C
28/08/2017 2287 15620 830 Depósito Online 22.871.562.000.451 1.749,05 C 3.504,69 C
28/08/2017 3508 99015 870 Transferência on line 553.508.000.042.914 1.615,26 C 5.119,95 C
28/08 3508 42914-7 EQUILÍBRIO VIT
28/08/2017 0038 99020 870 Transferência on line 600.038.000.102.662 263,12 C 5.383,07 C
28/08 0038 102662-3 KARINE A GOULA
28/08/2017 3126 99020 870 Transferência on line 603.126.000.113.256 799,00 C 6.182,07 C

28/08 3126     113256-3 NILSON WILVERT

28/08/2017 0000 14105 874 Transferência Agendada 65.500.000.018.764 274,34 C 6.456,41 C
28/08 0655 18764-X FERNANDA P F S
28/08/2017 0000 13113 431 Tar Depós Proces-Caixa 892.401.200.316.838 2,00 D 6.454,41 C
Tarifa referente a 28/08/2017
28/08/2017 0000 13113 431 Tar Depós Proces-Caixa 892.401.200.316.840 2,00 D 6.452,41 C
Tarifa referente a 28/08/2017
28/08/2017 0000 00000 345 BB Renda Fixa LP 100 2 6.452,41 D 0,00 C
29/08/2017 1307 01307 870 Transferência on line 601.307.000.023.828 468,70 C 468,70 C
29/08 1307 23828-7 LIVIA MILHOMEM
29/08/2017 0000 00000 999 S A L D O 468,70 C 468,70 C

I

Basicamente preciso seguir esses passos:

1 - Fazer o sistema desconsiderar as 12 primeiras linhas do extrato;

2 - Quando ler Dt. Movimento (13ª linha) entender que o extrato começa na próxima linha (14ª linha);

2a) Começar a ler o extrato a partir da 1ª data da 14ª linha.

3 - Tirar os espaços até o código de operação;

3a) Operação começa na coluna 61 e vai até a 63.

3b) Código de operação possui 3 dígitos.

4 - Fazer o sistema entender que estes 3 dígitos definem a operação realizada (TED, DOC, Débito em conta, etc);

5 - Ler o valor da operação;

5a) Valor vai da coluna 122 a 129.	

6 - Jogar os dados dentro de um array.

Mas não faço ideia de como começar.

Poderia me ajudar?

Obrigado.

1 Resposta

E

Boa tarde amigo já fiz algo parecido para ler arquivo vou te enviar um exemplo aqui:

Você vai usar essa classe para ler o Arquivo BufferedReader na classe abaixo tem alguns exemplos como eu pego a partir de algo escrito e posição, espero que ajude.

public class ProcessarArquivoLog {

public void processarArquivoLog (BufferedReader bufferedReaderArquivLog) {
    
    //Cria Uma Lista Para Armazenar Os Rankings
    List<Ranking> listaRanking = new ArrayList<>();
    
    //Cria Uma Lista Para Armazenar Os Jogadores
    List<Jogador> listaJogador = new ArrayList<>();

    //Adiciona O Jogador Roman
    Jogador jogadorRoman = new Jogador();
    jogadorRoman.setCodigoJogador(1);
    jogadorRoman.setNomeJogador("Roman");
    listaJogador.add(jogadorRoman);

    //Adiciona O Jogador Nick
    Jogador jogadorNick = new Jogador();
    jogadorNick.setCodigoJogador(2);
    jogadorNick.setNomeJogador("Nick");
    listaJogador.add(jogadorNick);
    
    try {
        
    //Lê A Primeira Linha Do Log Do Jogo
    String linhaArquivoLog = bufferedReaderArquivLog.readLine();

    //Cria A Partida
    Partida partida = new Partida();
    Ranking ranking = new Ranking();                    

    //Verifica A Linha Se Tem New Match Para Pegar O Número Da Partida
    if (linhaArquivoLog.contains("New match")) {

        String[] codigoPartida = linhaArquivoLog.split(" ");
        
        Double codigoPartidaDouble = new Double(Double.valueOf(codigoPartida[5]));

        partida.setCodigoPartida(codigoPartidaDouble);

        //Incluí O Jogador Roman No Ranking
        ranking.setPartida(partida);
        ranking.setJogador(jogadorRoman);
        listaRanking.add(ranking);
        
        //Incluí O Jogador Nick No Ranking
        partida = new Partida();
        ranking = new Ranking();
        
        partida.setCodigoPartida(codigoPartidaDouble);
        ranking.setPartida(partida);
        ranking.setJogador(jogadorNick);
        
        listaRanking.add(ranking);

    }

    System.out.println(linhaArquivoLog);

    while (linhaArquivoLog != null) {
        
        //Faz As Contagens Das Mortes Sofridas Pelos Outros Jogadores
        if (linhaArquivoLog.contains("killed") && linhaArquivoLog.contains("using")) {
            
            String[] nomeJogador = linhaArquivoLog.split(" ");
            
            for (Ranking rankingAssasinatos : listaRanking) {
                
                if (rankingAssasinatos.getJogador().getNomeJogador().equalsIgnoreCase(nomeJogador[3])) {
                    
                    Integer quantidadeAssasinatos = ranking.getPartida().getQuantidadeAssasinatos();
                    
                    rankingAssasinatos.getPartida().setQuantidadeAssasinatos(++quantidadeAssasinatos);
                }
                
                if (rankingAssasinatos.getJogador().getNomeJogador().equalsIgnoreCase(nomeJogador[5])) {

                    Integer quantidadeMortes = rankingAssasinatos.getPartida().getQuantidadeMortes();

                    rankingAssasinatos.getPartida().setQuantidadeMortes(++quantidadeMortes);

                }
            }
        }
        
        //Faz As Contagens Das Mortes Sofridas Pelo <WORLD>
        if (linhaArquivoLog.contains("<WORLD> killed")) {
            
            String[] nomeJogador = linhaArquivoLog.split(" ");
            
            for (Ranking rankingMortes : listaRanking) {

                if (rankingMortes.getJogador().getNomeJogador().equalsIgnoreCase(nomeJogador[5])) {

                    Integer quantidadeMortes = rankingMortes.getPartida().getQuantidadeMortes();

                    rankingMortes.getPartida().setQuantidadeMortes(++quantidadeMortes);

                }
            }
        }

        linhaArquivoLog = bufferedReaderArquivLog.readLine();

        System.out.println(linhaArquivoLog);

    }
    
    
    //Fecha O Arquivo Lido
    bufferedReaderArquivLog.close();
    
    //Monta O Ranking Final Da Partida
    String rankingFinalJogo = "\n";
    rankingFinalJogo += "Ranking Dev Amil 1.0 ";
    rankingFinalJogo += "\n";
    
    for (Ranking rankingFinal : listaRanking) {
        
        rankingFinalJogo += "\n";
        rankingFinalJogo += "Partida: " + rankingFinal.getPartida().getCodigoPartida();
        rankingFinalJogo += "\n";
        rankingFinalJogo += "Jogador: " + rankingFinal.getJogador().getNomeJogador();
        rankingFinalJogo += "\n";
        rankingFinalJogo += "Quantidade De Assasinatos: " + rankingFinal.getPartida().getQuantidadeAssasinatos();
        rankingFinalJogo += "\n";
        rankingFinalJogo += "Quantidade De Mortes: " + rankingFinal.getPartida().getQuantidadeMortes();
        rankingFinalJogo += "\n";

        if (rankingFinal.getPartida().getQuantidadeMortes() == 0) {
            
            rankingFinalJogo += "Parabéns Você Ganhou Um 'award' Por Não Morrer Nenhuma Vez Durante A Partida!";
            rankingFinalJogo += "\n";
            
        }
    }
    
    System.out.println(rankingFinalJogo);
    
    } catch (Exception e) {
    
        System.out.println("Erro :" + e);
        
    }

}
}
Criado 14 de setembro de 2017
Ultima resposta 16 de set. de 2017
Respostas 1
Participantes 2