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!!
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!!
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
[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!!