Pesquisa em arquivo txt

5 respostas
R

Tenho o seguinte arquivo txt:

83 F00 16/11/2009 09:42:04 00000000000000000009
84 F01 16/11/2009 11:53:05 00000000000000000002
85 F01 16/11/2009 11:53:11 00000000000000000007
86 F03 16/11/2009 11:53:18 00000000000000000007
87 F04 16/11/2009 11:53:31 00000000000000000002
88 F01 16/11/2009 11:53:40 00000000000000000002

correspondente a ID, TAREFA, DATA, HORA, MATRICULA DO FUNCIONARIO.

Preciso calcular o tempo de uma tarefa, e para isso preciso lançar pesquisas no txt, como:

o funcionario 00007 começou a tarefa F01 ás 16/11/2009 11:53:11
o funcionario 00007 começou a tarefa F03 ás 16/11/2009 11:53:18

o tempo da tarefa F01 é a subtração do inicio de F03 - F01

Alguem pode me dar uma dica ou ajudar no desenvolvimento do codigo…

Obrigado.

5 Respostas

nel

Boa tarde.

Uma breve ajuda:

//busca o arquivo txt
File file = new File(nome_do_arquivo.txt);				

//arquivo criado para a saída			
FileWriter fileWriter = new FileWriter("resultado.txt");
			
//arquivo para processo			
FileInputStream stream = new FileInputStream(file);
InputStreamReader streamReader = new InputStreamReader(stream);
BufferedReader reader =  new BufferedReader(streamReader);	

String arquivo = null;

  while(null != (arquivo = reader.readLine())) {
    //sua lógica
  }

É por ai o caminho. Abraços.

T

então mas onde está o problema que vc não ocnsegue resolver? em ler o TXT? na lógica? onde?

pablosaraiva

Medir o tempo de duração de uma tarefa pelo início da próxima leva a dois problemas.

A última tarefa do dia fica com um tempo gigantesco (até a primeira do dia seguinte) e as tarefas imediatamente anteriores aos horários de intervalo também.

O ideal seria ter uma linha indicando o início de uma tarefa e outra indicando seu fim.

Fora isso, para implementar o que você quer da forma como está o arquivo basta que você leia linha a linha, separe as partes com substring e guarde cada linha em um objeto.

Percorrendo sua coleção de objetos, olhe o campo de código de funcionário e veja se existe tarefa aberta pra ele. Se existir, finalize e contabilize o tempo, caso contrário, inicie a primeira tarefa.

Espero ter ajudado.

ViniGodoy

Depois do Java 5, é melhor ler um arquivo linha a linha usando o Scanner. Como seu separador é o espaço, use-o para fazer split dos campos:

SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
Scanner scan = new Scanner(new File("arquivo.txt"));
while (scan.hasNextLines()) {
   String linha = scan.nextLine();
   String[] campos = linha.split(" ");
   int id = Integer.parseInt(campos[0]);
   String tarefa = campos[1];
   DateTime dataHora = formato.parse(campos[2] + " " + campos[3]);
   String matricula = campos[4];

   //Seu processamento aqui.
}

Crie uma classe LancamentoHora para conter esses valores, faça ela implementar a interface Comparable e ordene os lançamentos por tempo.
Depois, crie um Map>, para agrupar todos os lançamentos de um único funcionário. Use um TreeSet, para que eles já fiquem ordenados por tempo.

Agora é só fazer o calculo.

R

BLZ VINICIUS…

EU ESTOU COMEÇANDO COM JAVA…
TENHO UMA DUVIDA QTO AO QUE ME PASSOU, PQ DEVO FAZER A CLASSE LANCAMENTOHORA COMPARABLE<LANCAMENTOHORA>?
OS PONTOS ESTÃO EM ORDEM CRESCENTE DE DATA/HORARIO NA ORIGEM, E O MEU MAIR PROBLEMA ESTA EM FAZER ISSO.:
TEMPO 1 // DIGAMOS 8:00
GET(TAREFA1)

TEMPO 2 // DIGAMOS 12:00
GET(TAREFA2)

O RESULTADO DEVE SER
TAREFA1 TEMPO1 TEMPO2 DURAÇÃO(TEMPO2 - TEMPO1)

VALEU

Criado 16 de novembro de 2009
Ultima resposta 20 de nov. de 2009
Respostas 5
Participantes 5