Ordenar aquivo

2 respostas Resolvido
java
Eudesrt

Pessoal , preciso ordenar um arquivo txt , e gerar um novo com essas ordenação.

Consigo ler o arquivo e até gerar um novo, mais nao tenho ideia de como posso fazer pra ordenar da forma que o cliente me pede. Será que alguém pode me dar um luz.

Recebo um arquivo no seguinte formato:

[telefone removido]-Cabecalho
paiDDX9200210
filho0027772789YYD001
paiXXX9200212
filho0027772733YYD001
filho0027772732YYD002
filho0027772721YYD002
paiADSX9200714
filho0027772789FDG001
paiDDX9200210
filho0027772789XDFD001
pai2XXX9200212
filho0027772733HJK001
FinalArquivo00020012

A ordenação deve ser iniciada a partir do Pai , mantendo sempre o filho abaixo (Nao há nada que ligue o filho ao pai , somente a posição do arquivo original ).
Tenho que varrer o arquivo procurando por outo código pai igual posição 4 ex . (DDX9200210) , recuperar ele e seus filhos .

O arquivo novo deve ficar assim:

[telefone removido]-Cabecalho
paiDDX9200210
filho0027772789YYD001
paiDDX9200210
filho0027772789XDFD001
pai2XXX9200212
filho0027772733YYD001
filho0027772732YYD002
filho0027772721YYD002
paiXXX9200212
filho0027772733HJK001
paiADSX9200714
filho0027772789FDG001
FinalArquivo00020012

2 Respostas

peczenyj
Solucao aceita

Ola

uma forma de fazer é:

  1. defina seu arquivo ( classes header, body, end, pai, filho - escolha nomes que vc goste )

  2. leia o arquivo de forma a vc estrair esses objetos ( o header vai conter a linha com o cabeçalho, o end vai conter o FinalArquivo00020012 )

  3. o body é composto de uma Coleção de Pais ( ex List<Pai> ) e um Pai pode ter 0, 1 ou varios Filhos ( ex: List<Filho> ).

  4. vc precisa de uma classe Parser que vai parsear o arquivo ( item 2 ) e sabe que a primeira linha gera um header, a ultima gera um end e no meio vc tem a sua logica.

eu não entendi lhufas das regras desse arquivo, eu ACHO que é baseada em ordem do codigo. pois bem a sua classe pai vai ter algo como

public class Pai {
   private List<Filho> filhos;
   private String codigo;
   /* resto da implementacao */
}

public class Filho {
   private String codigo;
   /* resto da implementacao */
}

O que eu faria: eu tentaria ordenar a lista de Pais usando um sort onde vc compara pelo codigo ( veja interface Comparable ) e cada lista de filhos eu ordenaria tb.

OU eu usaria um Set / TreeSet que garante a ordem ( no lugar de List / ArrayList ).

Se cada classe sua tiver um toString() que gera a linha exata do arquivo, vai perceber que basta fazer

body.toString()

que vc ja sabe como escrever. ou crie uma classe apenas para serializar esses dados.

Eudesrt

Obrigado com sua dica consegui andar valeu!

Criado 19 de setembro de 2016
Ultima resposta 19 de set. de 2016
Respostas 2
Participantes 2