Powershell String to Int
Hallo in die Runde,
ich versuche aus einem Array einen Textstring zu zerlegen, solange das ganze als String bleibt, ist das alles in Ordnung. Einige Werte möchte ich aber auch gerne gleich als [Int] oder [Decimal] deklarieren um damit in Powershell rechnen zu können.
Mit folgendem Code bekommen ich den passenden String zu fassen:
Ausgabe ist dann:
1130400
1099000
2590500
ohne Trim und Replace sieht das so aus:
" 1130,400"
" 1099,000"
" 2590,500"
ergänze ich nun bei
erhalte ich die Fehlermeldung:
Der Wert "System.Object[]" vom Typ "System.Object[]" kann nicht in den Typ "System.Int32" konvertiert werden.
Bemühe ich Tante Google, stoße ich auf einige Beiträge, die sich darauf beziehen, das ein Array ein Systemobjekt darstellt, soweit klar. Aber ich bin ja im Textfeld, also innerhalb des Systemobjekts und versuche eine Zeichenfolge umzuwandeln - oder sehe ich gerade den Wald vor lauter Bäumen nicht?
Die Daten selbst bekomme ich aus einer Textdatei die ich zur Laufzeit in mehrere Arrays aufteile, daher auch der Substring-Befehl, da ich nur anhand fester Längen und Positionen die Daten ermitteln kann.
Eventuell hat jemand eine Idee, wo mein Problem liegt.
Grüße
Forseti
ich versuche aus einem Array einen Textstring zu zerlegen, solange das ganze als String bleibt, ist das alles in Ordnung. Einige Werte möchte ich aber auch gerne gleich als [Int] oder [Decimal] deklarieren um damit in Powershell rechnen zu können.
Mit folgendem Code bekommen ich den passenden String zu fassen:
$array.Where({$_.Name -eq $AUN}) | foreach { $_.Group.Substring(152,10).Trim().Replace(',',''))}
Ausgabe ist dann:
1130400
1099000
2590500
ohne Trim und Replace sieht das so aus:
" 1130,400"
" 1099,000"
" 2590,500"
ergänze ich nun bei
| foreach { [int]($_.Group.Substring(152,10).Trim().Replace(',','')) }
erhalte ich die Fehlermeldung:
Der Wert "System.Object[]" vom Typ "System.Object[]" kann nicht in den Typ "System.Int32" konvertiert werden.
Bemühe ich Tante Google, stoße ich auf einige Beiträge, die sich darauf beziehen, das ein Array ein Systemobjekt darstellt, soweit klar. Aber ich bin ja im Textfeld, also innerhalb des Systemobjekts und versuche eine Zeichenfolge umzuwandeln - oder sehe ich gerade den Wald vor lauter Bäumen nicht?
Die Daten selbst bekomme ich aus einer Textdatei die ich zur Laufzeit in mehrere Arrays aufteile, daher auch der Substring-Befehl, da ich nur anhand fester Längen und Positionen die Daten ermitteln kann.
Eventuell hat jemand eine Idee, wo mein Problem liegt.
Grüße
Forseti
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 672585
Url: https://administrator.de/forum/powershell-string-to-int-672585.html
Ausgedruckt am: 22.04.2025 um 20:04 Uhr
6 Kommentare
Neuester Kommentar
Die Property "Group" ist wohl ansich selbst auch ein Array (vermutlich das Ergebnis von group-object), deswegen die Meldung, also expandieren oder ebenfalls per foreach durchlaufen und umwandeln:
$array | ? Name -eq $AUN | select -ExpandProperty Group | %{[int64]($_.Substring(152,10) -replace '[^\d]')}
Zitat von @Forseti2003:
Wie oben schon geschrieben mit [int] aber auch mit[int32] probiert und lauf damit in die Fehlermeldung.
Zitat von @manuel-r:
Du hast also einen String in einer Variable vom Typ String und willst daraus einen Wert in einer Variable vom Typ Int32 machen?! Der einfachste Trick den ich dazu kenne ist
Manuel
Du hast also einen String in einer Variable vom Typ String und willst daraus einen Wert in einer Variable vom Typ Int32 machen?! Der einfachste Trick den ich dazu kenne ist
[string]$zahlalsstring = "2147483647"
[int32]$stringalsint32 = $zahlalsstring * 1
$stringalsint32
2147483647
Wie oben schon geschrieben mit [int] aber auch mit[int32] probiert und lauf damit in die Fehlermeldung.
Ich glaube, du hast den Trick nicht verstanden.
Einen String der einen Zahlenwert enthält einfach mit 1 multiplizieren. Schon ist der Variablentyp "Zahl" (allgemein ausgedrückt).
Manuel
Zitat von @manuel-r:
Ich glaube, du hast den Trick nicht verstanden.
Einen String der einen Zahlenwert enthält einfach mit 1 multiplizieren. Schon ist der Variablentyp "Zahl" (allgemein ausgedrückt).
Manuel
Ich glaube, du hast den Trick nicht verstanden.
Einen String der einen Zahlenwert enthält einfach mit 1 multiplizieren. Schon ist der Variablentyp "Zahl" (allgemein ausgedrückt).
Manuel
Achtung NEIN, das klappt hier nur weil du den Typ der Variablen auf [int32] setzt, denn das Multiplizieren von Strings mit Integern bewirkt nicht die Umwandlung sondern das der String x mal wiederholt hintereinander gehängt wird.
Das Multiplizieren bewirkt hier nicht das Umwandeln in einen Integer!!
Kannst du hiermit
("1234" * 1).gettype()
# Ergebnis:
# IsPublic IsSerial Name # BaseType
# -------- -------- ---- --------
# True True String System.Object
"1234" * 3
# Ergebnis: 123412341234
Ergebnis ist weiterhin ein Objekt vom Typ String aber so oft wiederholt wie die Zahl dahinter,
Ein Integer wird es erst durch die Typangabe der Variablen. Also ist das Multiplizieren Blödsinn, es reicht die Angabe des neuen Typs vor dem String zur Unwandlung
[Int32]"1234"
Zitat von @Forseti2003:
Eventuell hat jemand eine Idee, wo mein Problem liegt.
Sicher, dass Group für alle Elemente vom Typ String ist?