web-dev-qa-db-fra.com

Powershell: convertit une chaîne en nombre

Ok, je suis débutant - et perdu avec ceci:

J'ai un tableau où certaines données de disque de WMI sont capturées:

$drivedata = $Drives | select  @{Name="Kapazität(GB)";Expression={$_.Kapazität}}

Le tableau a ces valeurs (2 lecteurs):

@{Kapazität(GB)=1.500} @{Kapazität(GB)=1.500}

et je veux juste convertir le 1.500 en un nombre 1500

J'ai essayé différentes suggestions que j'ai trouvées ici, mais je ne pouvais pas le faire fonctionner:

-Replace ".","" and [int] ne fonctionne pas. Je ne suis pas sûr si regex serait correct et comment faire cela.

Pour l'aide, merci beaucoup d'avance.

34
MMAX

Transformer la chaîne en tant que int ne fonctionnera pas de manière fiable. Vous devez le convertir en un int32. Pour cela, vous pouvez utiliser la classe .NET convert et ses ToInt32 méthode. La méthode nécessite un string ($strNum) comme entrée principale et le base number (10) pour que le système numérique convertisse. En effet, vous pouvez non seulement convertir en système décimal (le fichier 10 numéro de base), mais aussi, par exemple, le système binaire (base 2).

Essayez cette méthode:

[string]$strNum = "1.500"
[int]$intNum = [convert]::ToInt32($strNum, 10)

$intNum
50
Roderick Bant

Divisez simplement la variable contenant des nombres en tant que chaîne par 1. PowerShell convertit automatiquement le résultat en entier.

$ a = 15; $ b = 2; $ a + $ b -> 152

Mais si vous le divisez avant:

$ a/1 + $ b/1 -> 17

21
user5197928

Étant donné que ce sujet n'a jamais reçu de solution vérifiée, je peux proposer une solution simple aux deux problèmes pour lesquels vous voyez des solutions.

  1. Remplacer le "." caractère lorsque la valeur est une chaîne

La classe string propose une méthode de remplacement pour l'objet string que vous souhaitez mettre à jour:

Exemple:

$myString = $myString.replace(".","") 
  1. Conversion de la valeur de chaîne en entier

La classe system.int32 (ou simplement [int] dans powershell) dispose d'une méthode appelée "TryParse" qui non seulement renvoie un booléen indiquant si la chaîne est un entier, mais renvoie également la valeur de cet entier dans un fichier existant. variable par référence si elle retourne true.

Exemple:

[string]$convertedInt = "1500"
[int]$returnedInt = 0
[bool]$result = [int]::TryParse($convertedInt, [ref]$returnedInt)

J'espère que cela répond à la question que vous avez initialement soulevée dans votre question.

8
cloud_hero