Powershell: 2 Zahlen aus einer Variabeln extrahieren?
Hallo Zusammen
Ich habe folgende Variable: $DatumP
Erstellt mit:
CSV_Input_A.RGI_RechnungsDatum = [datetime]::ParseExact($CSV_Input_A.RGI_RechnungsDatum, "dd.MM.yyyy", $null)
$DatumP = ([datetime]$CSV_Input_A.RGI_RechnungsDatum).ToString("yyyyMMdd")
Diese Variable brauche ich, jedoch möchte ich aus diese Variable die ltzten zwei Zahlen (Tage) extrahieren und in eine zweite Variable packen.
Jedoch wüsste ich nicht wie...
Habt ihr eine Idee? Vielen Dank schon im Voraus!
Grüsse Flo
1 Antwort
ich habe keine Ahnung welchen Wert Deine Variable $CSV_Input_A übergibt.
zur Demo verwende ich statt dessen einen statischen CSV-String...
Um Teile eines Strings an einer speziellen Position zu selektieren verwende die Methode .Substring
#Emuliere einlesen eines CSV
$CSV_Input_A= 'blah,22.03.2014,Ratzebue'|ConvertFrom-Csv -header 'Name','RGI_RechnungsDatum','Sonstwas'
$CSV_Input_A|fl #mal anzeigen
#diese Typumwandlung innerhalb eines Custom-Objekts sehr ich eher kritisch....
$CSV_Input_A.RGI_RechnungsDatum = [datetime]::ParseExact($CSV_Input_A.RGI_RechnungsDatum, "dd.MM.yyyy", $null)
$CSV_Input_A|fl #mal anzeigen
#Feld $CSV_Input_A.RGI_RechnungsDatum in String umwandeln
$DatumP = ([datetime]$CSV_Input_A.RGI_RechnungsDatum).ToString("yyyyMMdd")
$DatumP #anzeigen
#2 Zeichen an Position 6 eines String selektieren
$MyDayString=$DatumP.Substring(6,2)
$MyDayString #anzeigen
pause
Allerdings ist obiges quatsch, da du auch einfach ohne den Umweg über den "yyyyMMdd"-String auf den Tag zugreifen kannst :
#Emuliere einlesen eines CSV
$CSV_Input_A= 'blah,22.03.2014,Ratzebue'|ConvertFrom-Csv -header 'Name','RGI_RechnungsDatum','Sonstwas'
#Verwende statt des empfindlichen "[datetime]::ParseExact" besser "Get-Date" (wenn sich , warum auch immer in deinem CSC das Datumsformat ändert fliegt Dir ParseExact um die Ohren!) und eien eigene Variable (Das input-Objekt bleibt wie es ist!)
$myRGI_RechnungsDatum=Get-Date $CSV_Input_A.RGI_RechnungsDatum
$DatumP = $myRGI_RechnungsDatum.ToString('yyyyMMdd')
$DatumP #anzeigen
#die Stringzerlegung ist Fehleranfällig (rufe stattdessen einfach nur den Tag ab)
$MyDayString=$myRGI_RechnungsDatum.ToString('dd')
$MyDayString #anzeigen
pause
...die Sache mit [datetime]::ParseExact und dem Datumsformat
#Emuliere einlesen von zwei Datensätzen mit variierendem Datumsformat
$CSV_Input_A='blah,22.03.2014,Ratzebue','Miep,25.3.14,Holahutze'|ConvertFrom-Csv -header 'Name','RGI_RechnungsDatum','Sonstwas'
#ParseExact kann nur mit dem exakt vorgegebenen Stringformat umgehen
$CSV_Input_A|%{([datetime]::ParseExact($_.RGI_RechnungsDatum, "dd.MM.yyyy", $null)).ToString('yyyyMMdd')}...das ist 💩 und unflexibel!
Get-Date kann das besser...
$CSV_Input_A='blah,22.03.2014,Ratzebue','Miep,25.3.18,Holahutze'|ConvertFrom-Csv -header 'Name','RGI_RechnungsDatum','Sonstwas'
#ParseExact kann nur mit dem exakt vorgegebenen Stringformat umgehen
$CSV_Input_A|%{(Get-Date $_.RGI_RechnungsDatum).ToString('yyyyMMdd')}