50 votes

Dans Powershell, quelle est la manière idiomatique de convertir une chaîne en entier?

La seule méthode que j'ai trouvée est une distribution directe:

 > $numberAsString = "10"
> [int]$numberAsString
10
 

L'approche standard est-elle dans Powershell? Est-il prévu qu'un test soit effectué avant pour s'assurer que la conversion réussira et si oui, comment?

63voto

Shay Levy Points 41404

Vous pouvez utiliser l'opérateur -as. Si le casting réussit, vous récupérez un nombre:

 $numberAsString -as [int]
 

58voto

CB. Points 24549

Utilisation de .net

 [int]$b = $null #used after as refence
$b
0
[int32]::TryParse($a , [ref]$b ) # test if is possible to cast and put parsed value in reference variable
True
$b
10
$b.gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Int32                                    System.ValueType
 

notez ceci (fonction de coercition PowerShell)

 $a = "10"
$a + 1 #second value is evaluated as [string]
101 

11 + $a # second value is evaluated as [int]
21
 

13voto

mjolinor Points 23012

Un test vrai / faux rapide pour savoir s'il sera converti en [int]

 [bool]($var -as [int] -is [int])
 

9voto

JPBlanc Points 26156

Pour moi $numberAsString -as [int] de @Shay Levy est la meilleure pratique, j'utilise également [type]::Parse(...) ou [type]::TryParse(...)

Mais, selon ce dont vous avez besoin, vous pouvez simplement mettre une chaîne contenant un nombre à droite d'un opérateur arithmétique avec un int à gauche, le résultat sera un Int32:

 PS > $b = "10"
PS > $a = 0 + $b
PS > $a.gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Int32                                    System.ValueType
 

Vous pouvez utiliser Exception (try / parse) pour vous comporter en cas de problème

4voto

Manu Letroll Points 1401

Je ferais probablement quelque chose comme ça:

 [int]::Parse("35")
 

Mais je ne suis pas vraiment un Powershell. Il utilise la méthode Parse statique de System.Int32. Il doit lever une exception si la chaîne ne peut pas être analysée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X