这是我的两名员工sajjad和hamid。我在这里提供的数据是文本文件行。
sajjad 127 9/18/2022 7:30:10 AM 1
sajjad 127 9/18/2022 8:24:51 AM 2
sajjad 127 9/18/2022 2:42:45 PM 1
sajjad 127 9/18/2022 2:44:50 PM 1
Abdul Hamid 128 9/1/2022 8:38:24 AM 1
Abdul Hamid 128 9/1/2022 8:42:09 AM 1
Abdul Hamid 128 9/1/2022 3:28:54 PM 2
Abdul Hamid 128 9/1/2022 5:36:22 PM 2
我是编码新手,我想开发一个脚本,读取每个员工的第一次考勤记录(在我的情况下是签入(和最后一次记录(在我们的情况下,是签出(,就像在我的文本行中有多个记录一样,但我想取每个员工的第1次和最后一个记录,进行小时、分、秒的计算,并将结果导出到csv文件
员工报到时间--->sajjad 127 9/18/2022上午7:30:10
员工结账时间--->sajjad 127 2022年9月18日下午2:44:50
员工sajjad日期2022年9月18日工作时间为7小时14分40秒
员工报到时间--->阿卜杜勒·哈米德128 2022年1月9日上午8:38:24
员工结账时间--->阿卜杜勒·哈米德128 2022年9月1日下午5:36:22
员工哈米德日期2022年1月9日工作时间为8小时57分58秒
这个怎么样?
我使用正则表达式来收集文本文件中的数据,然后进行计算。
using namespace System.Collections.Generic
$data=@"
**sajjad 127 9/18/2022 7:30:10 AM 1**
sajjad 127 9/18/2022 8:24:51 AM 2
sajjad 127 9/18/2022 2:42:45 PM 1
**sajjad 127 9/18/2022 2:44:50 PM 1**
**Abdul Hamid 128 9/1/2022 8:38:24 AM 1**
Abdul Hamid 128 9/1/2022 8:42:09 AM 1
Abdul Hamid 128 9/1/2022 3:28:54 PM 2
**Abdul Hamid 128 9/1/2022 5:36:22 PM 2**
"@
$datelog = [System.Collections.Generic.Dictionary[datetime,System.Collections.Generic.Dictionary[string,psobject]]]::new()
foreach($row in ($data -split [environment]::NewLine)) {
if($row -match 'W***(.*) d+W+(d+/d+/d+ d+:d+:d+ [AP]M)W+(d+)**$') {
$DAY=([datetime]$matches[2]).date
$time = [datetime]($matches[2])
$person = $matches[1]
if (-not $datelog.containskey($DAY)) {
$datelog.add($DAY,[Dictionary[string,psobject]]::new())
}
if($datelog[$DAY].containskey($person)) {
$datelog[$DAY][$person].Endtime=$time
} else {
$datelog[$DAY].add($person,[pscustomobject]@{Starttime = $time;Endtime = $null})
}
}
}
$exportlist = @()
foreach ($day in $datelog.keys) {
$day.tostring("yyyy-MM-dd")
foreach($p in $datelog[$day].keys) {
$elapsed =$datelog[$day][$p].endtime - $datelog[$day][$p].starttime
$elapsedString="{0:d2}h, {1:d2}m, {2:d2}s" -f $elapsed.Hours,$elapsed.Minutes,$elapsed.Seconds
$exportlist += [pscustomobject]@{
Day = $day.tostring("yyyy-MM-dd")
Person = $p
Start = $datelog[$day][$p].starttime.tostring("HH:mm")
End = $datelog[$day][$p].endtime.tostring("HH:mm")
Elapsed = $elapsedString
}
}
}
$exportlist|export-csv -Path c:tempexport.csv -Delimiter ";"
结果(export.csv(:
#TYPE System.Management.Automation.PSCustomObject
"Day";"Person";"Start";"End";"Elapsed"
"2022-09-18";"sajjad";"07:30";"14:44";"07h, 14m, 40s"
"2022-09-01";"Abdul Hamid";"08:38";"17:36";"08h, 57m, 58s"