ARQ Texto - Duvidas - [RESOLVIDO]

Leo ou todos!!

Bom, estou procurando nos sites atrás deste MAP, pois nunca usei este parâmetro…porém está um pouco difícil…

eu sei que é fogo, mas será que dá para quebrar mais essa ai? dando uma clareada nas ideias…

valeu!!

java.util.Map.

Sugiro você dar uma lida na guia de Collections do Java, ou na documentação oficial, ou em alguma apostila!

Leo,

se possível, veja se isso é o caminho:


Map<String, ArrayList> mapa = new HashMap<String, ArrayList>();
mapa.put("JOB_ID", dadosArquivo.get(13).toString()); 

Eu poderia usar como chave, a posição do meu ArrayList ao invés dele ler do arquivo novamente ?

Pois, pensei aqui em ler direto da ArrayList o JOB_ID, para comparar com a outra ArrayList e assim dando certo, imprimir o novo arquivo já com as posições de hora inicial e hora final

[]´s

  • assumindo que o arquivo de OK tem JOB_ID na posicao 0, status na posicao 1.

[code]Map<String, String> status = new HashMap<String, String>();
for (String linha : linhasArquivo) {
String[] partes = linha.split("\s+");
status.put(partes[0], partes[1]); //isso vai ter job_id -> ok ou não
}

//no segundo arquivo, assumindo que o JOB_ID está na coluna 3
for (String linha : linhasArquivo2) {
String[] partes = linha.split("\s+");
String statusJobId = status.get(partes[3]);
//continua processamento.
}[/code]

Leo.

O meu arquivo de OK esta assim:

180211  001237  180211  MCPSD663  82553  ENDED "OK"
180211  001249  180211  MCPSD665  82564  ENDED "OK"
180211  001301  180211  MCPSD670  82571  ENDED "OK"
180211  002414  180211  MCPSC363  84594  ENDED "OK"
180211  002426  180211  MCPSC365  84613  ENDED "OK"

E o meu arquivo de erro esta assim:

180211  072916  180211  YF1GOK7C  82131  COND 0004
180211  073116  180211  YKBGGIXA  82542  COND 0001
180211  074546  180211  LLBGD501  83709  COND 0008
180211  075407  180211  UYBGM608  84150  COND 0008
180211  075410  180211  UYBGM607  84212  COND 0008
180211  075910  180211  YF1GOK7C  84537  COND 0004

Então, no segundo FOR que você mencionou, ficaria como String statusJobId = status.get(partes[5]); ?

E no primeiro FOR, de acordo com o arquivo acima, seria: status.put(partes[5], partes[6]);

é isso ?

1o for: você popula a lista de OKs. se partes[5] tem o ID e o partes[6] tem o horário de finalização (que é o que você quer), está ok.

2o for: você consulta a lista de OKs. novamente, se partes[5] desse arquivo tem o mesmo ID do arquivo anterior, é isso aí.

Leo,

Então, depois que eu comparar os ID´s e ver que são iguais, tenho que pegar a coluna que tem o horário do arquivo de OK e jogar em um novo arquivo que ira conter todas as informações dos erros mais o horário do arquivo de OK ficando neste formato abaixo:

180211  072916  073015  180211  YF1GOK7C  82131  COND 0004
180211  073116  074017  180211  YKBGGIXA  82542  COND 0001
180211  074546  075015  180211  LLBGD501  83709  COND 0008
180211  075407  080015  180211  UYBGM608  84150  COND 0008
180211  075410  081510  180211  UYBGM607  84212  COND 0008
180211  075910  081020  180211  YF1GOK7C  84537  COND 0004
180211  080128  083015  180211  DRREPR75  85148  COND 0012

Pergunto-lhe novamente, pois não sei fazer isso, como consigo criar um novo arquivo com este formato acima?

tenho que jogar os dados em uma nova ArrayList igual fiz na captura do erros ? ou é de outra forma…

Se puder me ajudar em mais essa, te agradeço, estou muito enrolado e realmente não sei como fazer…

obrigado,

[code]
BufferedWriter bw = new BufferedWriter(new FileWriter(new File(“out.txt”)));
for (…) { //loop de processamento

//tenho todos os campos a serem escritos
for (int a1 = 0; a1 < campos.length; a1++) {
bw.print(campo[a1]); bw.print(’ ');
}
bw.println();
}

bw.flush();
bw.close();[/code]

Isso?

Isso mesmo, legal, mais uma vez obrigado…

bom, agora, vou tentar quebrar a cabeça para fazer o processo de comparação…

você já me deu o inicio e o final, vou tentar me virar, mesmo sendo um pouco complicado…

Mas brigadão mesmo leo, vc me deu uma força e tanto desde o início…

Abraços,

:thumbup:

Leo,

Seria mais ou menos isso ? ou to fazendo m…


Map<String, String> status = new HashMap<String, String>();   


for (String linha : dadosArquivo) {   
String [] partes = linha.split("\\s+");
status.put(partes[5], partes[2]);
}	

for (String linha : errosArquivo) {   
String[] partes = linha.split("\\s+");   
String statusJobId = status.get(partes[5]);   

StringBuffer arq = new StringBuffer();
	
if(statusJobId.equals(status)){

arq.append(partes[0]);
arq.append(partes[1]);
arq.append(partes[2]);
arq.append(status.get(dadosArquivo));
arq.append(partes[3]);
arq.append(partes[4]);
arq.append(partes[5]);

Leo,

Bom, seguinte, eu fiz o exemplo acima, não sei se está certo ou se é isso, porém não sai do lugar.

fiquei batendo cabeça, mas não consegui andar…acredito que já era de se esperar…

Será que vc se importaria mais uma vez, de me ajudar nessa ultima parte ?

é só essa comparação que esta faltando para eu finalizar.

dá mais esta força ai?? é possível ??

vlw…

Alguém poderia dar uma força ai na minha dúvida ?

Dicas daonde pode estar errado.

[code]
Map<String, String> status = new HashMap<String, String>();

for (String linha : dadosArquivo) {
String [] partes = linha.split("\s+");
status.put(partes[5], partes[2]); //certo
}

for (String linha : errosArquivo) {
String[] partes = linha.split("\s+");
String statusJobId = status.get(partes[5]); //certo

StringBuffer arq = new StringBuffer();

if(statusJobId.equals(status)){ //errado, talvez desnecessário

arq.append(partes[0]);
arq.append(partes[1]);
arq.append(partes[2]);
arq.append(status.get(dadosArquivo)); //errado, seria statusJobId?
arq.append(partes[3]);
arq.append(partes[4]);
arq.append(partes[5]);[/code]

Seria isso:

		Map<String, String> status = new HashMap<String, String>();     
	    						  
	    						  
	    						for (String linha : dadosArquivo) {     
	    						String [] partes = linha.split("\\s+");   
	    						status.put(partes[5], partes[2]); //certo   
	    						}     
	    						  
	    						for (String linha : errosArquivo) {     
	    						String[] partes = linha.split("\\s+");     
	    						String statusJobId = status.get(partes[5]);  //certo   
	    						  
	    						  
	    						StringBuffer arq = new StringBuffer();   

	    						arq.append(partes[0]);   
	    						arq.append(partes[1]);   
	    						arq.append(partes[2]);   
	    						arq.append(status.get(statusJobId));   
	    						arq.append(partes[3]);   
	    						arq.append(partes[4]);   
	    						arq.append(partes[5]);  
	    						
	    						
	    						BufferedWriter bw = new BufferedWriter(new FileWriter(new File("C://Projeto_Log//out.txt")));  
	    						
	    						for(int j = 0; j < arq.length(); j++){
	    							
	    							bw.write(arq.length()); bw.write(" ");
	    							
	    						}
arq.append(statusJobId);

legal…

e a finalizaçao para a gravaçao dos dados esta correta ?

pois tentei fazer igual voce tinha me mostrado bw.print(arq[0]) ; bw.write(" ");

e deu problema, ele nao localiza o método print.

Eu confundi o writer com o printer…

Tenta usar o PrintWriter ao invés de usar BufferedWriter (só trocar as classes) e usa daí os print() e println() para mudar de linha.

Legal Leo…

Mais uma vez obrigado e desculpa encher o saco…

[]´s

Leo,

cara, to tendo mais um problema, ta voltando apenas valor NULL no horário do campo dos arquivo de OK.

tá ficando desta forma:

180211  072916  null  180211  YF1GOK7C  82131  COND  0004
180211  073116  null  180211  YKBGGIXA  82542  COND  0001
180211  074546  null  180211  LLBGD501  83709  COND  0008
180211  075407  null  180211  UYBGM608  84150  COND  0008
180211  075410  null  180211  UYBGM607  84212  COND  0008
180211  075910  null  180211  YF1GOK7C  84537  COND  0004
180211  080128  null  180211  DRREPR75  85148  COND  0012

Deixei o código desta forma:


	Map<String, String> status = new HashMap<String, String>();     
	    						  
	    						  
	    						for (String linha : dadosArquivo) {     
	    						String [] partes = linha.split("\\s+");   
	    						status.put(partes[5], partes[1]); //certo   
	    						}     
	    						  
	    						for (String linha : errosArquivo) {     
	    						String[] partes = linha.split("\\s+");     
	    						String statusJobId = status.get(partes[5]);  //certo   
	    						  
	    						
	    						StringBuffer arq = new StringBuffer();   
					
	    						arq.append(partes[0] + "  ");   
	    						arq.append(partes[1] + "  ");
	    						arq.append(statusJobId + "  ");
	    						arq.append(partes[2] + "  ");   
	    						arq.append(partes[3] + "  ");   
	    						arq.append(partes[4] + "  ");   
	    						arq.append(partes[5] + "  " + partes[6]); 
	    						//arq.append(partes[7]);
	    						
	    						finalizado.add(arq.toString());
	    						
	    						}
	    						
	    						PrintWriter bw = new PrintWriter(new File("C://Projeto_Log//out.txt"));  
	    						
	    						for(String dados : finalizado){
	    								bw.println(dados); 
	    							
	    						}

usei um novo ArrayList. vc acha que tem necessidade ou não era necessário ??

valeu!!