narthan
Goto Top

Powershell CSV String in Spalte einfügen, falls Wert kürzer als 9 Zeichen

Schönen Start in die Woche liebe Administratoren,

ich bastle gerade an einer CSV und möchte eine bestimmte Spalte daraufhin überprüfen, ob die Werte kürzer als 9 Stellen sind und falls ja, mit Nullen zu Beginn auffüllen, bis es 9 Stellen sind. Ich habe es bereits mit String.Insert und If Abfrage versucht, erhalte jedoch lediglich den bereits existierenden, letzten Wert der Spalte ohne addierte Nullen zurück (im folgenden Bsp. also "91").

Die CSV sieht in etwa so aus:
"EMP";"TYP1";"TYP2";"DATE";"TYP3";"VAL"  
"";"CT";"CS";"20200928";"VV";"1901"  
"";"CT";"CS";"20200928";"VV";"20113"  
"";"CT";"CS";"20200928";"VV";"159"  
"";"CT";"CS";"20200928";"VV";"91"  

und als Ergebnis würde ich es gerne wie folgt haben (Spalte VAL):
"EMP";"TYP1";"TYP2";"DATE";"TYP3";"VAL"  
"";"CT";"CS";"20200928";"VV";"000001901"  
"";"CT";"CS";"20200928";"VV";"000020113"  
"";"CT";"CS";"20200928";"VV";"000000159"  
"";"CT";"CS";"20200928";"VV";"000000091"  


Ich habe versucht, die CSV Datei über foreach und Import-CSV einzulesen und dann innerhalb der foreach Anweisung die einzelnen Zeilen der Spalte VAL mittels IF Abfrage auf String.Length zu überprüfen und dann über String.Insert die Nullen einzufügen. Das klappt leider nicht.

Per Websuche habe ich nur mögliche Lösungen über C# aber nicht PS gefunden. Kann mir bitte jemand weiterhelfen? face-smile

Vielen Dank und schöne Grüße
narthan

Content-ID: 608375

Url: https://administrator.de/contentid/608375

Ausgedruckt am: 08.11.2024 um 11:11 Uhr

145916
Lösung 145916 28.09.2020 aktualisiert um 17:29:10 Uhr
Goto Top
Ich habe versucht, die CSV Datei über foreach und Import-CSV einzulesen und dann innerhalb der foreach Anweisung die einzelnen Zeilen der Spalte VAL mittels IF Abfrage auf String.Length zu überprüfen und dann über String.Insert die Nullen einzufügen. Das klappt leider nicht.
Überflüssig, das macht dir z.B. die padLeft Funktion viel komfortabler face-wink
$csv = Import-CSV 'D:\blablub.csv' -delimiter ";"  
$csv | %{$_.Val = $_.Val.padLeft(9,'0')}  
$csv
Du kannst natürlich auch so wildes hier konstruieren wenn du willst
# ...
$csv | %{$_.Val = '0'*(9-$_.Val.length) + $string}
# ....
narthan
narthan 28.09.2020 um 16:19:57 Uhr
Goto Top
Hallo @145916,

Genau so habe ich es mir vorgestellt und das ist ja echt kurz und praktisch. Genial, perfekt!

Vielen Dank für deine Hilfe, da lese ich mich gleich erstmal schön ein, kannte padLeft noch gar nicht face-smile

Danke nochmal und schöne Woche!
Gruß
narthan