bonaskorn

Daten werden falsch aus csv-Datei in Powershell importiert

Hallo zusammen
Ich habe ein Script zur berechnung von Zeiten aus einer csv-Datei geschrieben. Das Script sieht folgendermassen aus:
clear
$table = Import-Csv -Path 'C:\Temp\Stempelungen\StempelungenJira.csv' -Delimiter ";"  
$counter = 0
$tablelength = $table.count


While ($counter -lt $tablelength) {

$parts = $table[$counter] -split ';'  
$name = $parts[4]
$prename = $parts[5]
$date = $parts[6]
$time = $parts[7] 

$parts2 = $table[$counter + 1] -split ';'  
$name2 = $parts2[4]
$prename2 = $parts2[5]
$date2 = $parts2[6]
$time2 = $parts2[7]

$calc = $time2 - $time

 if ($name -eq $name2 -and $prename -eq $prename2 -and $date -eq $date2) {
  write-host $name;$prename;$date;$calc;$counter
 }
 else{
 write-host falsch $counter

 $counter = $counter - 1

 }
$counter = $counter + 2
}

Die importierte csv-Datei sieht so aus:

x;x;x;x;Name;Vorname;Datum;Zeit;x;x;x;x;x
x;x;x;x;Walker;John;13.01.;08:00;x;x;x;x;x
x;x;x;x;Walker;John;13.01.;11:00;x;x;x;x;x
x;x;x;x;Walker;John;13.01.;12:00;x;x;x;x;x
x;x;x;x;Walker;John;13.01.;17:00;x;x;x;x;x
x;x;x;x;Walker;John;14.01.;07:00;x;x;x;x;x
x;x;x;x;Walker;John;14.01.;12:00;x;x;x;x;x
x;x;x;x;Walker;John;14.01.;12:30;x;x;x;x;x
x;x;x;x;Walker;John;14.01.;16:00;x;x;x;x;x

Alle x's sind irrelevante Informationen, welche ich für das Resultat und auch im Skript nicht benötige.

Mein Ziel ist es, immer die Zeitwerte von zwei Zeilen zu vergleichen, und dann die Differenz der beiden zu berechnen.
Wenn ich das nun allerdings mit meinem Skript versuche, erhalte ich folgende Fehlermeldung: Der Wert "Zeit=16:24" kann nicht in den Typ "System.Int32" konvertiert werden. Fehler: "Die Eingabezeichenfolge hat das falsche Format."

Nach einigem überlegen ist mir dann aufgefallen wieso das ganze nicht klappt. Der importierte Datensatz wird als "Zeit=16:24" abgespeichert, womit man natürlich nicht rechnen kann.
Nun meine Frage: wie muss ich das ganze Importieren, um effektive Zeitwerte zu erhalten, mit denen ich rechnen kann?
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 652500

Url: https://administrator.de/forum/daten-werden-falsch-aus-csv-datei-in-powershell-importiert-652500.html

Ausgedruckt am: 01.07.2025 um 16:07 Uhr

Doskias
Doskias 15.02.2021 aktualisiert um 15:54:51 Uhr
Goto Top
moin

get-date "12:45"  
wandelt die Uhrzeit in ein Datum um.
get-date "15.1.21 12:45"  
Datum und Uhrzeit

Gruß
Doskias

Nachtrag:
mit
$a = get-date "08:00"  
$b = get-date "11:00"  
$b-$a
kannst du Differenzen berechnen.
BonasKorn
BonasKorn 15.02.2021 um 16:09:12 Uhr
Goto Top
Wie würde das dann in meinem Script implementiert aussehen?
Doskias
Doskias 15.02.2021 um 16:12:23 Uhr
Goto Top
Ernsthaft? Denk doch bitte einmal kurz selber nach. Wo ziehst du denn zwei Zeiten voneinander ab? und dann Setzt du ein get-date davor. Und fertig.
BonasKorn
BonasKorn 15.02.2021 um 16:19:38 Uhr
Goto Top
Ich habe es mal auf Zeile 21 eingefügt: $calc = get-date $time2 - $time

Das ändert nichts daran, dass die Variabel $Zeit "Zeit=08:00" beinhaltet und somit nicht zum rechnen geeignet ist.

Immernoch ein Fehler: Get-Date : Der Parameter "Date" kann nicht gebunden werden. Der Wert " Zeit=18:58" kann nicht in den Typ "System.DateTime" konvertiert werden. Fehler: "Die Zeichenfolge wurde nicht als gültige DateTime erkannt. Ein unbekanntes Wort beginnt bei
Index 1."
Doskias
Lösung Doskias 15.02.2021 um 16:27:09 Uhr
Goto Top
Das ist schonmal die richtige Stelle, allerdings müsstest du es 2 mal machen. du wandelst nur $time2 um. time fehlt noch. Das mit dem Zeit= davor habe ich überlesen.

Versuche mal folgendes:
$time2=$time2 -replace 'Zeit='  
$time=$time -replace 'Zeit='  
$calc = (get date $time2)  - (get-date $time)

Wenn ich dich richtige verstanden habe, funktioniert es so in meinem Test face-smile
BonasKorn
BonasKorn 15.02.2021 um 16:37:17 Uhr
Goto Top
Klappt ohne Fehlermeldungen, danke!

Ich habe zusätzlich noch in der if-Schleife die Ausgabe etwas abgeändert, es sieht nun folgendermassen aus:
write-host $name;$prename;$date;"Zeit = $calc";$counter

Die Ausgabe so:
Name=Walker
Vorname=John
Stempeldatum=05.02.21
Zeit = 03:30:00
4453
Doskias
Doskias 15.02.2021 um 16:43:00 Uhr
Goto Top
Freut mich zu hören.

Ich würde persönlich Datum und Zeit zusammen umwandeln um dann Tagesübergreifende Auswertungen zu ermöglichen, aber da weiß ich nicht ob das überhaupt zutrifft.