Powershell: 2 Zahlen aus einer Variabeln extrahieren?

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')}
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
Flo348675 
Fragesteller
 26.01.2021, 22:53

Vielen Dank, dass hat mir sehr geholfen!

0