Tratar TXT e gerar XLS

Boa noite galera.

Seguinte eu recebo um arquivo TXT com registros de clientes, e preciso editar este arquivo e gerar um .xls dele.
Segue o TXT:

%!                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
%%DocumentMedia: papel1 595 842 75 white normal
%%+papel2 595 842 75 blue azul
%XRXrequeriments: duplex
%%BeginFeature: *Duplex True
<</Duplex true>> setpagedevice
%%EndFeature
(|) SETDBSEP
(va44.dbm) STARTDBM
ESTIPULANTE|APOLICE|NUM_CERTIF|DT_VIG|SEGURADO|CPF|CAPIT1|CAPIT2|CAPIT3|CAPIT4|CAPIT5|CAPIT6|CAPIT7|CAPIT8|CAPIT9|CAPIT10|DT_CAPIT|CONTA_DEBITO|CUSTO|DIA_COB|BENEF1|PARENT1|PART1|BENEF2|PARENT2|PART2|BENEF3|PARENT3|PART3|BENEF4|PARENT4|PART4|BENEF5|PARENT5|PART5|DTPOSTAGEM|NUMOBJETO|DESTINATARIO|ENDERECO|BAIRRO|CIDADE|UF|CEP|REMETENTE|REMET_ENDERECO|REMET_BAIRRO|REMET_CIDADE|REMET_UF|CODIGO_CIF|POSTNET|REMET_CEP|N_CUSTO|DATADIA|CLIENTE|DT_VIG1|DT_VIG2|TEXTO
dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados
dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados
dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados
%%EOF
%!
(|) SETDBSEP
(va52.dbm) STARTDBM
ESTIPULANTE|APOLICE|NUM_CERTIF|DT_VIG|SEGURADO|CPF|CAPIT1|CAPIT2|CAPIT3|CAPIT4|CAPIT5|CAPIT6|CAPIT7|CAPIT8|CAPIT9|CAPIT10|DT_CAPIT|CONTA_DEBITO|CUSTO|DIA_COB|BENEF1|PARENT1|PART1|BENEF2|PARENT2|PART2|BENEF3|PARENT3|PART3|BENEF4|PARENT4|PART4|BENEF5|PARENT5|PART5|DTPOSTAGEM|NUMOBJETO|DESTINATARIO|ENDERECO|BAIRRO|CIDADE|UF|CEP|REMETENTE|REMET_ENDERECO|REMET_BAIRRO|REMET_CIDADE|REMET_UF|CODIGO_CIF|POSTNET|REMET_CEP|N_CUSTO|DATADIA|CLIENTE|DT_VIG1|DT_VIG2|TEXTO
dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados
dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados
%%EOF
%!
(|) SETDBSEP
(sf13.dbm) STARTDBM
SEGURADO|BILHETE|NUMSORTEIO|DTPOSTAGEM|NUMOBJETO|DESTINATARIO|ENDERECO|BAIRRO|CIDADE|UF|CEP|REMETENTE|REMET_ENDERECO|REMET_BAIRRO|REMET_CIDADE|REMET_UF|REMET_CEP|CODIGO_CIF
dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados
%%EOF

O que eu preciso é tratar as informações da seguinte forma:
Onde aparece por exemplo “(sf13.dbm)” é o nome de um formulário, logo abaixo desta linha aparece o nome dos campos, tanto o nome do formulário quanto o nome dos campos não serão impressos, porem preciso criar um “if” no nome do formulário pois terei que para cada tipo de formulário inserir umas informações no inicio e no final de cada linha de acordo com o nome do formulário.
Ou seja o TXT acima ficcaria assim:

VA44|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|MENSAGEM AAAAAAAA
VA44|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|MENSAGEM AAAAAAAA
VA44|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|MENSAGEM AAAAAAAA
VA52|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|MENSAGEM BBBBBBBB
VA52|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|MENSAGEM BBBBBBBB
SF13|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|MENSAGEM CCCCCCCCC

Observação: cada formulário pode ter mais ou menos campos. A mensagem no final de cada formulário é padrão para cada tipo de formulário.

Depois de tratar isso preciso gerar um excel, no caso eu uso o “poi” porem também preciso de uma luz de como que em JAVA eu converto “|” para colunas.

Já pesquisei bastante mas não consegui nenhuma lógica para eu conseguir resolver o problema.

Galera obrigado pela atenção.

de uma pesquisada sobre JEXCEL ou POI .

será suficiente para resolver seu problema acredito eu

Rafael obrigado pela ajuda.
Eu já utilizo o POI para gerar xls.
Porem meu maior problema nem é tanto em gerar o excel da resultante e sim tratar os dados.
Conforme o exemplo que eu coloquei eu recebo um arquivo TXT com muito “lixo” ai eu dou um “replaceAll” para retirar tudo que eu quero, só que meu problema está em acrescentar uma informação no inicio e no fim de cada linha de acordo com o nome do formulário (ex.:va44.dbm), e preciso excluir sempre a primeira linha (referente ao nome do campo) depois da linha onde vai o nome do formulário.

seria um algoritmo mais ou menos assim:

if (linha = va44.dbm){
    excluo a linha do nome do formulário e excluo a próxima linha;
    insiro aqui uma string "concateno" com os dados "concateno" insiro outra string;
    
   se encontrar uma linha que tenha os caracteres .dbm paro de inserir as linhas (pois preciso entrar em outro if para tratar outros formulário)
}

Obs.: Cada formulário pode aparecer N vezes no decorrer do TXT.

Obrigado.

nao teria como vc converter esse txt em xml, faz decadas que nao trabalho mais com xls, nao me lembro mais de nada

mas acredito que se fosse xml o tratamento seria mais simples pois a cada novo formulario seria una nova tag

Rafael boa tarde,

Primeiramente obrigado pela ajuda.

Consegui gerar o excel da forma que eu precisava usando o código a baixo:

import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class Main {
      public static void main(String[] args) throws IOException {
			HSSFWorkbook wb = new HSSFWorkbook();
			//Definindo o nome da planilha
			HSSFSheet sheet1 = wb.createSheet("Plan1");

			//criando o head CAMPO1, CAMPO2...
			HSSFRow col	= sheet1.createRow(0);
			for (int c = 1; c <= 126; c++){
				int l = c -1;
				col.createCell((short) l).setCellValue("CAMPO"+c);
			}

			// criando um loop nos registros e inserindos no xls (troquei as informações que busco no banco de dados por números "01234567890")
			for (int i= 1; i < 50000; i++){
				HSSFRow row	= sheet1.createRow(i);
				row.createCell((short) 0).setCellValue("01234567890");
				row.createCell((short) 1).setCellValue("01234567890");
				row.createCell((short) 2).setCellValue("01234567890");
				row.createCell((short) 3).setCellValue("01234567890");
				row.createCell((short) 4).setCellValue("01234567890");
				row.createCell((short) 5).setCellValue("01234567890");
				row.createCell((short) 6).setCellValue("01234567890");
				row.createCell((short) 7).setCellValue("01234567890");
				row.createCell((short) 8).setCellValue("01234567890");
				row.createCell((short) 9).setCellValue("01234567890");
				row.createCell((short) 10).setCellValue("01234567890");
				row.createCell((short) 11).setCellValue("01234567890");
				row.createCell((short) 12).setCellValue("01234567890");
				row.createCell((short) 13).setCellValue("01234567890");
				row.createCell((short) 14).setCellValue("01234567890");
				row.createCell((short) 15).setCellValue("01234567890");
				row.createCell((short) 16).setCellValue("01234567890");
				row.createCell((short) 17).setCellValue("01234567890");
				row.createCell((short) 18).setCellValue("01234567890");
				row.createCell((short) 19).setCellValue("01234567890");
				row.createCell((short) 20).setCellValue("01234567890");
				row.createCell((short) 21).setCellValue("01234567890");
				row.createCell((short) 22).setCellValue("01234567890");
				row.createCell((short) 23).setCellValue("01234567890");
				row.createCell((short) 24).setCellValue("01234567890");
				row.createCell((short) 25).setCellValue("01234567890");
				row.createCell((short) 26).setCellValue("01234567890");
				row.createCell((short) 27).setCellValue("01234567890");
				row.createCell((short) 28).setCellValue("01234567890");
				row.createCell((short) 29).setCellValue("01234567890");
				row.createCell((short) 30).setCellValue("01234567890");
				row.createCell((short) 31).setCellValue("01234567890");
				row.createCell((short) 32).setCellValue("01234567890");
			}

			//salvando a planilha
			//FileOutputStream stream = new FileOutputStream("C:/JAVA/ProcessadorTexto/planilha.xls");
			FileOutputStream stream = new FileOutputStream("//delta/F/excel/planilha.xls");
			wb.write(stream);
	}

}

Agora estou estudando expressões regulares e tokenizes para realizar a seguinte tarefa:

Preciso inserir os dados em várias tabelas do banco de dados de acordo com o nome de cada formulário, inserir informações no BD eu consigo tranqüilamente porem não consigo definir qual o nome da tabela que eu tenho que dar INSERT, o nome da tabela é o mesmo nome do nome do formulário.

(VA44)
ESTIPULANTE|APOLICE|NUM_CERTIF|DT_VIG|SEGURADO|CPF|CAPIT1|CAPIT2|CAPIT3|CAPIT4|CAPIT5|CAPIT6|CAPIT7|CAPIT8|CAPIT9|CAPIT10|DT_CAPIT|CONTA_DEBITO|CUSTO|DIA_COB|BENEF1|PARENT1|PART1|BENEF2|PARENT2|PART2|BENEF3|PARENT3|PART3|BENEF4|PARENT4|PART4|BENEF5|PARENT5|PART5|DTPOSTAGEM|NUMOBJETO|DESTINATARIO|ENDERECO|BAIRRO|CIDADE|UF|CEP|REMETENTE|REMET_ENDERECO|REMET_BAIRRO|REMET_CIDADE|REMET_UF|CODIGO_CIF|POSTNET|REMET_CEP|N_CUSTO|DATADIA|CLIENTE|DT_VIG1|DT_VIG2|TEXTO|
dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|MENSAGEM AAAAAAAA
dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|MENSAGEM AAAAAAAA
dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|MENSAGEM AAAAAAAA
%%EOF
(VA52)
NOME1|APOLICE|NUM_CERTIF|DT_VIG|SEGURADO|CPF|CAPIT1|CAPIT2|CAPIT3|CAPIT4|CAPIT5|CAPIT6|CAPIT7|CAPIT8|CAPIT9|CAPIT10|DT_CAPIT|CONTA_DEBITO|CUSTO|DIA_COB|BENEF1|PARENT1|PART1|BENEF2|PARENT2|PART2|BENEF3|PARENT3|PART3|BENEF4|PARENT4|PART4|BENEF5|PARENT5|PART5|DTPOSTAGEM|NUMOBJETO|DESTINATARIO|ENDERECO|BAIRRO|CIDADE|UF|CEP|REMETENTE|REMET_ENDERECO|REMET_BAIRRO|REMET_CIDADE|REMET_UF|CODIGO_CIF|POSTNET|REMET_CEP|N_CUSTO|DATADIA|CLIENTE|DT_VIG1|DT_VIG2|TEXTO
dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|MENSAGEM BBBBBBBB
dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|MENSAGEM BBBBBBBB
%%EOF
(SF13)
SEGURADO|BILHETE|NUMSORTEIO|DTPOSTAGEM|NUMOBJETO|DESTINATARIO|ENDERECO|BAIRRO|CIDADE|UF|CEP|REMETENTE|REMET_ENDERECO|REMET_BAIRRO|REMET_CIDADE|REMET_UF|REMET_CEP|CODIGO_CIF|POSTNET
dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|dados|MENSAGEM CCCCCCCCC
%%EOF

Onde está entre “parênteses” é o nome do formulário e da tabela a ser inserida, onde está o “%%EOF” é o final daquele formulário.

Desde já muito obrigado.

Outra coisa que eu me esqueci, uma linha abaixo da linha onde está o nome do formulário são os nomes dos campos da tabela.