[RESOLVIDO] - Bloco de Texto em TXT para ENTIDADE

3 respostas
denirroberto

Pessoal, boa noite a todos, preciso transformar blocos de texto em entidade, campos e registros.

Tenho um arquivo .dat onde traz blocos de textos no seguinte modelo:

evento01 {

campo01=valor

campo02=valor

campo03=valor

}
evento02 {

campo01=valor

campo02=valor

campo03=valor

campo04=valor

campo05=valor

}
evento03 {

campo01=valor

campo02=valor

}

E assim por diante, cerca de 49000 linhas. Preciso identificar cada bloco desse jogar no modelo e fazer inserção nas respctivas entidades.
Alguém tem uma boa idéia e a forma mais rápida do java executar esse processo? Seria muito grato.

Mais um detalhes, cada bloco pode repetir mais de uma vez, e não são todos os campos que tenho que capturar.

3 Respostas

denirroberto

Bom galera, resolvi metade dos pipinos neste post ficou assim:

Preciso resolver o problema do método inserir onde onde o array contem todos os dados é preciso fazer com que a cada 3 arrays preencham as variáveis.

----------Modelo---------
private String nomeHost;
    private String testeHost;
    private String dataHoraHost;

    //gets and sets
----------Controle---------
private ModeloTB001 modeloTB001;
    private File arq = new File("/TXT/status.dat");
    private Scanner scan;
    private String linha;

    public void entidadeIni() {
        try {

            if (scan == null) {
                scan = new Scanner(arq);
            }

            while (scan.hasNext()) {
                String textoLinha = scan.nextLine().replaceAll("\\{|\t|\n| ", "");
                if (textoLinha.equals("tb001_host")) {
                    System.out.println("Entidade: " + textoLinha);
                    dados();
                }
            }
        } catch (FileNotFoundException ex) {
            System.out.println("Erro: " + ex);
        }
    }

    private void dados() {
        try {

            if (scan == null) {
                scan = new Scanner(arq);
            }

            while (scan.hasNext()) {
                String textoLinha = scan.nextLine().replaceFirst("=", "|");
                String entidadeFim = textoLinha.replaceAll("\t| ", "");
                if (!entidadeFim.equals("}")) {
                    String valor[] = textoLinha.split("\\|");
                    try {
                        linha = linha + "|" + valor[1];
                    } catch (ArrayIndexOutOfBoundsException e) {
                        linha = linha + "|" + null;
                    }
                } else {
                    entidadeIni();
                }
            }
        } catch (FileNotFoundException ex) {
            System.out.println("Erro: " + ex);
        }
    }

    public void inserir() {
        String valor[] = linha.substring(5).split("\\|");
        
        modeloTB001 = new ModeloTB001();
        modeloTB001.setNomeHost(valor[0]);
        modeloTB001.setTesteHost(valor[1]);
        modeloTB001.setDataHoraHost(valor[2]);
        
        System.out.println("Inserindo Valores");
        System.out.println("Nome : " + modeloTB001.getNomeHost());
        System.out.println("Teste: " + modeloTB001.getTesteHost());
        System.out.println("Data : " + modeloTB001.getDataHoraHost());
    }

Modelo do arquivo status.dat

[code]
****************************************
***************STATUS.DAT***************
****************************************

tb001_host {
nome_host=nobreak
teste_host=voltagem
dth_ini=123456789
}

tb001_host {
nome_host=modem
teste_host=
dth_ini=987654321
}

tb001_host {
nome_host=swith
teste_host=porta
dth_ini=
}

tb002_comment {
nome_host=nobreak
comment_host=Testato por Denir
}

tb002_comment {
nome_host=modem
comment_host=Testato por pacote de Denir
}
[code]

denirroberto

Certo Galera consegui resolver de uma forma;

private void dados() {
        linha = null;
        try {

            if (scan == null) {
                scan = new Scanner(arq);
            }

            while (scan.hasNext()) {
                String textoLinha = scan.nextLine().replaceFirst("=", "|");
                String entidadeFim = textoLinha.replaceAll("\t| ", "");
                if (!entidadeFim.equals("}")) {
                    String valor[] = textoLinha.split("\\|");
                    try {
                        linha = linha + "|" + valor[1];
                    } catch (ArrayIndexOutOfBoundsException e) {
                        linha = linha + "|" + null;
                    }
                } else {
                    //entidadeIni(); //Substitui esse
                    inserir(); //Por esse
                }
            }
        } catch (FileNotFoundException ex) {
            System.out.println("Erro: " + ex);
        }
    }
public void inserir() {
        String valor[] = linha.substring(5).split("\\|");
        
        modeloTB001 = new ModeloTB001();
        modeloTB001.setNomeHost(valor[0]);
        modeloTB001.setTesteHost(valor[1]);
        modeloTB001.setDataHoraHost(valor[2]);
        
        System.out.println("Inserindo Valores");
        System.out.println("Nome : " + modeloTB001.getNomeHost());
        System.out.println("Teste: " + modeloTB001.getTesteHost());
        System.out.println("Data : " + modeloTB001.getDataHoraHost());
        
        entidadeIni();//Acrescentei esse
    }

Galera acho que é isso, e pra cada controle vou ler um bloco diferente, o problema é que ele terá que ler todo o arquivo desde o inívio. Se alguém tiver uma solução melhor fico muito agradecido.

denirroberto

Bom galera, acho que agora está pronto, fiz uma importação do arquivo original e ele levou cerca de 2 segundos para ler e importar um arquivo em blocos com mais de 15000 linhas. Acho que o tempo é aceitável.

Criado 20 de março de 2013
Ultima resposta 21 de mar. de 2013
Respostas 3
Participantes 1