[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);
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.
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.
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)