我想根据我的文本行计算小时和分钟



这是我的两名员工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"

最新更新