Expressões Regulares
Tenho um código que le um arquivo csv e tenho expressões regulares pra encontrar determinados trechos. Pois bem, o código capta a maioria, mas tem alguns que nao são capturados
msm seguindo a mesma regra das outras.
O codigo esta em Scala
formato do arquivo csv:
Relatório de Controle de Ponto (por período);;;;;;;;;;;;;;;;;;;;;;;;;;;
;Empregador:;;;;CASTAWARE SOLUTIONS INC.;;;;;;;;;;;;CNPJ:;;;;;;1234567890;;;;
;Endereço:;;;;CastaStreet, 1234 - Hawai;;;;;;;;;;;;Unidade:;;;;;;;;;;
;Período:;;;;;01/09/2019;;;a;;14/09/2019;;;;;;Emitido em:;;;;;;14/setembro/2019;;;;
;Matrícula:;;;;1;;;;;;;;;;;;Admissão:;;;;;;01/junho/2016;;;;
;Escala atual:;;;;08:00 Livres Almoço Flex Seg---- / Sáb-Dom Repouso;;;;;;;;;;;;Demissão:;;;;;;;;;;
;Cargo:;;;;;;;;;;;;Função:;;;;;;;;;;;;;;
;Empregado:;;;;Roberto Gomes Soares;;;;;;;;;;;;;;;;;;;;;;
Dia;;;"Jornada realizada
ENTR. SAIDA ENTR. SAIDA";;;;;;; Turno;;;Jornada Diurna/Not.;;"Extra
Diurno/Not.";;;;;;Devido;Abono;;Desab;;; Justificativa
01/09 - dom;;;;;;;;;;(R) ;;;;;;;;;;;;;;;;;
02/09 - seg;;;10:25 12:34 13:35 18:28;;;;;;;8:00h Livre (intervalo 12:00-13:00 [flex]);;;07:02;00:00;00:00;;;00:00;;;00:58;;;;;;
03/09 - ter;;;09:18 12:04 13:23 19:33;;;;;;;8:00h Livre (intervalo 12:00-13:00 [flex]);;;08:00;00:00;00:56;;;00:00;;;00:00;;;;;;
04/09 - qua;;;09:37 11:16 11:56 18:51;;;;;;;8:00h Livre (intervalo 12:00-13:00 [flex]);;;08:34;00:00;00:00;;;00:00;;;00:00;;;;;;
05/09 - qui;;;09:47 12:18 13:15 18:16;;;;;;;8:00h Livre (intervalo 12:00-13:00 [flex]);;;07:32;00:00;00:00;;;00:00;;;00:00;;;;;;
06/09 - ---;;;08:54 11:13 11:58 16:12;;;;;;;8:00h Livre (intervalo 12:00-13:00 [flex]);;;06:33;00:00;00:00;;;00:00;;;01:27;;;;;;
07/09 - sáb;;;;;;;;;;(R) ;;;;;;;;;;;;;;;;;
08/09 - dom;;;;;;;;;;(R) ;;;;;;;;;;;;;;;;;
09/09 - seg;;;09:22 11:40 12:44 19:07;;;;;;;8:00h Livre (intervalo 12:00-13:00 [flex]);;;08:00;00:00;00:41;;;00:00;;;00:00;;;;;;
10/09 - ter;;;;;;;;;;(F) 8:00h Livre (intervalo 12:00-13:00 [flex]);;;00:00;00:00;00:00;;;00:00;;;08:00;;;;;;
11/09 - qua;;;;;;;;;;(F) 8:00h Livre (intervalo 12:00-13:00 [flex]);;;00:00;00:00;00:00;;;00:00;;;08:00;;;;;;
12/09 - qui;;;;;;;;;;(F) 8:00h Livre (intervalo 12:00-13:00 [flex]);;;00:00;00:00;00:00;;;00:00;;;08:00;;;;;;
13/09 - ---;;;10:58 11:35 12:32 18:45;;;;;;;8:00h Livre (intervalo 12:00-13:00 [flex]);;;06:50;00:00;00:00;;;00:00;;;01:10;;;;;;
14/09 - sáb;;;;;;;;;;(R) ;;;;;;;;;;;;;;;;;
;Jornada + Abono;;;;;;;Jornada total;;;;52:31 (52,52);;;;00:00 (0,0);;;;;;;;;Jornada noturna;;
;52:31 (52,52);;;;;;;Extra total;;;;01:37 (1,62);;;;;;;;;;;;;;;
;Trabalhado (Jor.+Ext.);;;;;;;Atraso efetivo;;;;00:00 (0,0);;;;00:00 (0,0);;;;;;;;;Antecipação efetiva;;
;54:07 (54,13);;;;;;;Devido;;;;27:34 (27,58);;;;00:00 (0,0);;;;;;;;;Abonado;;
;Faltas;(horas);;;;;;Devido (s/faltas);;;;03:34 (3,58);;;;00:00 (0,0);;;;;;;;;Abonado (s/faltas);;
;3;24:00 (24,0);;;;;;Extra efetivo;;;;01:37 (1,62);;;;00:00 (0,0);;;;;;;;;Desabonado;;
;Dias;Feriados trab.;;;;;;Devido efetivo;;;;27:34 (27,58);;;;03:35:00;;;;;;;;;Devido efet(s/faltas;;
;14;0;;;;;;Dias escalados;;;;10;;;;-25:58 (-25,97);;;;;;;;;Saldo de Horas;;
;;;;;;;;BdH Acumulado;;;;-328:10 (-328,17);;;;80:00 (80,0);;;;;;;;;Horas programadas;;
Controle de Extra;;;;;;;;;;;;;;;;;;;;;;;;;;;
Jornada;;;;;;;Jornada de trabalho;;;;;;;;;;;;;;;;;;;52:30 (52,52);
Assinatura Gestor/Supervisor;;;;;;;;;;;;;;;;;;;Assinatura;;;;;;;;
No codigo eu pego as infos com nome do empregador, e os dias trabalhados alem do total de horas.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import scala.util.matching.Regex
import scala.io.Source
import com.sun.xml.internal.ws.util.StringUtils
object teste {
def main(args: Array[String]): Unit = {
val patternEmp = "\\;Empregado:\\;{4}([A-Za-z]*) ([A-Za-z]*) ([A-Za-z]*)\\;*".r;
val patternWkDay = "([0-9]{2}/[0-9]{2}) - ([a-z]{3})\\;{3}([0-9: ]*).*".r;
val patternWkJourney = "\\;Jornada \\+ Abono\\;{7}Jornada total\\;{4}([0-9]{2}:[0-9]{2}).*".r
val patternFlagTotJourney = "\\;(Trabalhado \\(Jor.+Ext.\\))\\;{7}Atraso efetivo\\;{4}[0-9: (,)]*\\;{4}[0-9: (,)]*\\;{9}Antecipação efetiva\\;\\;".r
val patternTotJourney = "\\;([0-9: (,)]*)\\;{7}Devido\\;{4}[0-9: (,)]*\\;{4}[0-9: (,)]*.*".r
val regexs = Seq[scala.util.matching.Regex](patternEmp,patternWkDay,patternWkJourney,patternFlagTotJourney,patternTotJourney)
val fileName = "RelExtraPorPeriodo.csv";
for(line <- Source.fromFile(fileName).getLines){
traduzLinha(line, regexs);
}
}
def traduzLinha(line : String, regexs:Seq[scala.util.matching.Regex]): Unit = {
regexs.foreach{
m => m.findAllIn(line).matchData foreach {
n =>
if(m.equals(regexs(0))){
println("Empregado: " + n.group(1) + " " + n.group(2)+ " " + n.group(3))
}
if(m.equals(regexs(1))){
println(n.group(1)+ "-" + n.group(2) + ": " + n.group(3))
}
if(m.equals(regexs(2))){
println("Jornada total: "+ n.group(1) + "\n")
}
if(m.equals(regexs(3))){
println(n.group(1)+ ":")
}
if(m.equals(regexs(4))){
println(n.group(1)+"\n")
}
}
}
}
}
Saida do codigo:
Empregado: Roberto Gomes Soares
01/09-dom:
02/09-seg: 10:25 12:34 13:35 18:28
03/09-ter: 09:18 12:04 13:23 19:33
04/09-qua: 09:37 11:16 11:56 18:51
05/09-qui: 09:47 12:18 13:15 18:16
06/09----: 08:54 11:13 11:58 16:12
08/09-dom:
09/09-seg: 09:22 11:40 12:44 19:07
10/09-ter:
11/09-qua:
12/09-qui:
13/09----: 10:58 11:35 12:32 18:45
Jornada total: 52:31
Trabalhado (Jor.+Ext.):
54:07 (54,13)
01/09-dom:
02/09-seg:
03/09-ter: 09:11 14:53
04/09-qua: 11:48 17:54 18:25 20:03
05/09-qui: 10:54 16:34 16:57 18:36
06/09----: 19:12
08/09-dom:
09/09-seg:
10/09-ter: 09:25 17:42 17:53 19:02
11/09-qua: 11:25 11:55 12:54 18:28 18:57 19:26
12/09-qui: 13:06 15:19 15:42
13/09----: 09:26 11:36 12:33 19:47
Jornada total: 35:52
Trabalhado (Jor.+Ext.):
45:39 (45,65)
Empregado: Gabriel Nunes Santos
01/09-dom:
02/09-seg: 10:00 19:04
03/09-ter: 10:18 19:23
04/09-qua: 18:56
05/09-qui: 10:03 12:03
06/09----: 09:44
08/09-dom:
09/09-seg: 09:32 18:48
10/09-ter: 11:16
11/09-qua: 09:14
12/09-qui: 18:27
13/09----:
Jornada total: 26:00
Trabalhado (Jor.+Ext.):
29:25 (29,42)
Empregado: Paulo Bandeira J
01/09-dom:
02/09-seg:
03/09-ter:
04/09-qua:
05/09-qui:
06/09----:
08/09-dom:
09/09-seg:
10/09-ter:
11/09-qua:
12/09-qui:
13/09----:
Jornada total: 00:00
Trabalhado (Jor.+Ext.):
00:00 (0,0)
01/09-dom:
02/09-seg: 11:40 17:19 17:28 18:45
03/09-ter: 11:24 19:02
04/09-qua: 11:20 13:05 13:53 19:03
05/09-qui: 12:34 14:22 14:53 20:46
06/09----: 11:13 12:51 13:59 16:59 17:09 18:41
08/09-dom:
09/09-seg: 11:16 18:48
10/09-ter:
11/09-qua: 10:32 13:42 14:34 18:16
12/09-qui: 10:52 13:58 15:24 18:44
13/09----: 11:37 20:18
Jornada total: 64:10
Trabalhado (Jor.+Ext.):
64:51 (64,85)
Empregado: Carlos Alex de
01/09-dom:
02/09-seg: 11:01 12:34 13:35 19:50
03/09-ter: 12:01 12:06 15:45 19:37
04/09-qua: 11:32 13:10 13:46
05/09-qui: 10:55 12:16 13:15 18:27
06/09----: 11:43 19:34
08/09-dom:
09/09-seg: 10:43 11:45 12:44 19:07
10/09-ter: 13:06 14:09 20:36
11/09-qua: 12:57 18:28 18:57 21:04
12/09-qui: 10:02 13:58 15:24 18:27
13/09----: 09:49 11:38 12:32 19:12
Jornada total: 56:40
Trabalhado (Jor.+Ext.):
56:40 (56,67)
01/09-dom:
02/09-seg: 10:14 18:13
03/09-ter: 13:13 17:05
04/09-qua: 11:16 16:01 16:13 18:09
05/09-qui: 13:32 17:29
06/09----: 10:44 12:27 12:42 16:58
08/09-dom:
09/09-seg: 09:45 12:28 12:34 17:52
10/09-ter: 13:06 19:34
11/09-qua: 12:11 18:40
12/09-qui: 13:03 14:32 14:37 18:23
13/09----:
Jornada total: 50:00
Trabalhado (Jor.+Ext.):
54:40 (54,68)
Empregado: Carol Maria Rondelli
01/09-dom:
02/09-seg: 10:03 13:02 13:14 19:15
03/09-ter: 15:45 19:15
04/09-qua: 10:51 18:04
05/09-qui: 12:57 16:58 17:04 19:15
06/09----: 12:47 18:54
08/09-dom:
09/09-seg: 10:54 19:31
10/09-ter: 16:08 19:01
11/09-qua: 09:58 13:39 14:51 19:20
12/09-qui: 12:40 19:16
13/09----: 11:53 18:15
Jornada total: 55:04
Trabalhado (Jor.+Ext.):
64:40 (64,67)
Empregado: Diego Rodrigues Abrantes
01/09-dom:
02/09-seg: 11:15 17:26
03/09-ter: 08:55 16:59
04/09-qua: 12:39 17:18
05/09-qui: 10:59 17:20
06/09----: 14:11 19:43
08/09-dom:
09/09-seg: 11:45 17:37
10/09-ter: 12:56 19:20
11/09-qua: 11:00 14:49
12/09-qui: 11:22 18:13
13/09----: 10:46 18:50
Jornada total: 00:00
Trabalhado (Jor.+Ext.):
61:46 (61,78)
Percebe-se que tem algumas horas sem nome do funcionario. Alguem sabe oq pode estar ocasionando essa anomaliaDiscussão (0)
Carregando comentários...