PowerShell importiert meine Zeitwerte falsch?
Die daten in meiner CSV haben das Format "hh:mm:ss", importiert in Powershell wird allerdings das Format "h:mm:ss".
Um von diesen Werten einen durchschnitt berechnen zu können, muss ich diese in Sekunden umwandeln und aufgrund des "fehlerhaften" Import funktioniert dies leider nicht.
Der Codeschnippsel um die Werte zu importieren sieht wie folgt aus:
$Antwortzeiten = ($data[730..737]. "Antwortzeit")
1 Antwort
Keine Ahnung wie Dein csv Strukturiert ist , deshalb meine Auslegung:
test.csv
"Name","Antwortzeit","WasWeissDerFuchs"
"Karl","11:50:22","blubb"
"Frieda","02:10:00","blah"
"Max","05:00:00","miff"
"Olga","07:52:11","murr"
"Harry","05:20:52","brr"
WTF... Wo hast Du denn $data[730..737]. "Antwortzeit" abgeguckt?😏 ist ja gruselig🥶
Erstmal einfach Importieren und etwas Anzeigen:
$Data = Import-Csv -Path 'Test.csv'
#mal zerlegen:
$Data|
ForEach-Object {
# eingelesene Daten als Tabellen mal anzeigen
$_|ft
#deine Zeiten sind Zeitspannen also vom Typ [TimeSpan] dazu
#ergo müssen wir die Strings in der Poperty "Antwortzeit" in einen TimeSpan casten
#mal Anzeigen
'Timespan-Objekt :'
[TimeSpan]$_.Antwortzeit|fl *
}
pause
...klappt.
Man kann zwar TimeSpans addieren und subtrahieren:
[TimeSpan]'11:50:22' + [TimeSpan]'02:10:00'
[TimeSpan]'11:50:22' - [TimeSpan]'02:10:00'
...aber die für einen Durchschnittswert nötige Division ist nicht direkt möglich. Allerdings kann man mit der .Ticks -Property wunderbar Rechnen (ist ein 64Bit-Integer/Long)
$DurschnittTicks= ([TimeSpan]'11:50:22' + [TimeSpan]'02:10:00').Ticks / 2
$DurschnittTicks #mal anzeigen
[TimeSpan]$DurschnittTicks #wieder zu einem TimeSpan casten
..war doch simpel...
Jetzt berechnen wir die Durchschnittszeit mal richtig ordentlich:
$Data = Import-Csv -Path 'Test.csv'
$DurchschnittsZeit = $Data|
ForEach-Object -Begin {
$Count=0
$Summe=0
} -Process {
$Count++ #mitzählen damit wir im Endblock die Summe teilen können
$Summe += ([TimeSpan]$_.Antwortzeit).Ticks
} -End {
[TimeSpan]($Summe / $Count) #Summe der Ticks durch Anzahl der gesammelten Werte zu eienm TimeSpan casten
}
$DurchschnittsZeit
$DurchschnittsZeit.toString('hh\:mm\:ss')
pause
Kurzfassung:
...
$DurchschnittsZeit = $Data|%{$Count=0;$Summe=0}{$Count++;$Summe += ([TimeSpan]$_.Antwortzeit).Ticks}{[TimeSpan]($Summe / $Count)}
...
das geht auch mit ausgewählten Arrayelementen:
$DurchschnittsZeit = $Data[2..4]| ...usw.
Viele Wege führen nach Rom:
$Data = Import-Csv -Path 'Test.csv'
[Timespan](($Data.Antwortzeit|%{$sum=0}{$sum+=([TimeSpan]$_).Ticks}{$sum}) / $Data.Count)
[Timespan][Long](($Data.Antwortzeit|%{([TimeSpan]$_).Ticks}| Measure-Object -sum).sum / $Data.Count)