Pesquisa em arquivo txt

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.

Boa tarde.

Uma breve ajuda:

[code]//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
}[/code]

É por ai o caminho. Abraços.

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

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.

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:

[code]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.
}[/code]

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<Funcionario, Set>, 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.

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